php - Laravel Eloquent ORM:通过多个一对多关系获取价值
问题描述
我有三个表,它们是users
, loans
,statuses
关系是这样的:
一个用户可以有很多贷款。贷款有许多状态步骤。在statuses
表中我有一列叫 status
,基本上就是告诉这一步yes
,no
。pending
种情况。
表结构如下所示:
users table
->id
->...
贷款表
->id
->...
->user_id (it is the foreign key ->references('id')->on('users');
状态表
->id
->...
->status (can be "yes", "no", "pending")
->...
->loan_id (it is the foreign key ->references('id')->on('loans');
模型如下所示:
在用户模型中:
public function loans(){
return $this->belongsToMany('App\Loan');
}
在贷款模型中:
public function users(){
return $this->belongsToMany('App\User');
}
public function statuses(){
return $this->hasMany('App\Status');
}
在状态模型中:
public function loan(){
return $this->belongsTo('App\Loan');
}
我的问题是如何获取yes
每个用户的状态号。假设我有五个用户,每个用户都有多个贷款。每个loan
都有,比如说20个步骤。但不同的loan
很多有不同的yes
步骤。我想使用 laravel 雄辩的 ORM 来获取一个数组,告诉我每个用户yes
在特定时间获得多少。所以我可以在我的前端刀片文件中循环遍历这个数组来显示用户进度。谢谢!
解决方案
使用 EloquentCollection
时得到的 Laravel 非常适合这种操作。假设您想获得一位用户的“是”状态:
//yesStatuses is itself a Collection, but it can be used in a foreach like an array
$yesStatuses = $user->loans
->map(function ($loan) {
return $loan->statuses;
})
->filter(function ($status) {
return $status->status === 'yes';
});
//Number of statuses === 'yes'
$yesStatuses->count();
//If you need it as a regular array
$yesStatuses->toArray();
当您查询您的用户表时,您应该注意加载您的loans
和statuses
急切的,否则您将为此操作执行许多查询。像这样的东西:
$users = App\User::with('loans.statuses')->get();
更多关于这个:
推荐阅读
- python - Python Webscraping通过坐标点击
- swift - ``在swift中是什么意思,为什么有用?
- sparql - 运行 SPARQL 查询时,Jena 内存数据集似乎很慢
- pyinstaller - 将 hydra 与 pyinstaller 一起使用
- node.js - 如何从一个目录导入所有内容并导出
- javascript - 位运算符 - 不同的结果(python vs javascript)
- python - 如何检查文件是否被修改?
- python - 如何在 Python 中创建一个新列表,以便对新列表的操作不会影响旧列表?
- wpf - winforms.Net5.0中如何使用IRawElementProviderSimple接口
- mysql - 使用 application.yml 连接到 MySQL