[英]Laravel Eloquent: In many to many relationships the ORM is returning only one Object
[英]Laravel Eloquent ORM: get value from passing through multiple one to many relationships
我有三個表,分別是users
, loans
, statuses
關系是這樣的:
一個用戶可以有很多貸款。 貸款有很多狀態步驟。 在statuses
表中,我有一列稱為status
,基本上是telsl此步驟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
。 因此,我可以在前端刀片文件中遍歷此數組以顯示用戶進度。 謝謝!
當您使用Eloquent時,您會獲得Laravel的Collection
,它對於這種操作非常有用。 假設您要獲得一位用戶的“是”狀態:
//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();
有關此的更多信息:
感謝您的幫助,SrThompson!
我認為集合中的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;
});
然后,在我的禿頭文件中,我將能夠在@foreach循環中顯示用戶的“是”狀態數。 再次感謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.