Php Laravel雄辩的ORM:通过传递多个一对多关系获得价值
我有三个表,分别是Php Laravel雄辩的ORM:通过传递多个一对多关系获得价值,php,laravel-5,eloquent,Php,Laravel 5,Eloquent,我有三个表,分别是用户,贷款,状态 这种关系是这样的: users table ->id ->... $users = App\User::with('loans.statuses')->get(); 一个用户可以有很多贷款。贷款有许多状态步骤。在状态表中,我有一个名为状态的列,基本上这一步是是,否挂起某种情况 表结构如下所示: users table ->id ->... $users = App\User::with('loans.statuses')
用户
,贷款
,状态
这种关系是这样的:
users table
->id
->...
$users = App\User::with('loans.statuses')->get();
一个用户可以有很多贷款。贷款有许多状态步骤。在状态
表中,我有一个名为状态
的列,基本上这一步是是
,否
<代码>挂起某种情况
表结构如下所示:
users table
->id
->...
$users = App\User::with('loans.statuses')->get();
贷款表
->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');
模型如下所示:
users table
->id
->...
$users = App\User::with('loans.statuses')->get();
在用户模型中:
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
number。假设我有五个用户,每个用户有多个贷款。每个贷款
都有20个步骤。但是不同的贷款
很多都有不同的yes
步骤。我想使用laravel Elount ORM获得一个数组,告诉我每个用户在特定时间获得多少yes
。因此,我可以在前端刀片文件中循环使用该数组来显示用户的进度。谢谢 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();
当您查询用户表时,您应该注意急切地加载贷款
和状态
,否则您将为此操作执行许多查询。大概是这样的:
users table
->id
->...
$users = App\User::with('loans.statuses')->get();
有关这方面的更多信息:
谢谢你的帮助,斯汤普森 我认为集合中的map()函数确实有帮助。因为我的目标是通过用户循环显示每个用户的属性,并计算该用户的“是”状态。因此,我将我的
'statuscount'
添加到用户集合中,如下所示:
$user['statuscount']=$yesStatusesCount;
我的工作代码块如下所示:
$users=User::with('loans')->with('loans.statuses')
->map(function ($user){
$yesStatuses = $user->loans->map(function ($loan) {
return $loan->statuses->where('status','yes')->count();
});
$yesStatusesCount=array_sum($yesStatuses->toArray());
$user['statuscount']=$yesStatusesCount;
return $user;
});
然后,在我的balde文件中,我将能够在@foreach循环中显示用户的“yes”状态编号。再次感谢 你使用的确切版本是什么?你试过什么了吗?如果是的话,你有什么错误吗?我还没有想出任何好的解决办法。我的目标是在用户集合(或数组)中统计状态。我用的是5.5