[英]Laravel Multiple Models Eloquent Relationships Setup?
我有3個型號
User
Pick
Schedule
我正在嘗試做以下事情
$picksWhereGameStarted = User::find($user->id)
->picks()
->where('week', $currentWeek)
->first()
->schedule()
->where('gameTime', '<', Carbon::now())
->get();
此代碼僅返回集合內的一個數組。 我希望它返回多個數組(如果有多個結果)。
我可以用->first()
替代其他東西,讓我返回不止1個結果。
如果沒有,我該如何建立我的模型關系以使其工作。
我的模型當前設置如下。
用戶模型
public function picks()
{
return $this->hasMany('App\Pick');
}
時間表模型
public function picks()
{
return $this->hasMany('App\Pick');
}
選擇模型
public function user()
{
return $this->belongsTo('App\User');
}
public function schedule()
{
return $this->belongsTo('App\Schedule');
}
由於您已經有了一個User
模型(在您的內部find
方法中使用了它,它是$user->id
),因此您可以加載它的Pick
關系並按如下所示加載那些Pick
的Schedule
:
編輯:假設您有一個schedules
表,並且您的picks
表有一個schedule_id
列。 嘗試這個。
$user->load(['picks' => function ($q) use ($currentWeek) {
$q->join('schedules', 'picks.schedule_id', '=', 'schedules.id')
->where('schedules.gameTime', '<', Carbon::now()) // or Carbon::now()->format('Y-m-d'). See what works.
->where('picks.week', $currentWeek);
}])->load('picks.schedule');
編輯:上面的代碼應返回具有schedules.gameTime < Carbon::now()
的user
picks
schedules.gameTime < Carbon::now()
嘗試一下並轉儲$user
對象以查看已加載的關系。 那就是你想要的Eloquent
。
提示:在轉儲$user
之前,您可能需要執行$user->toArray()
以便更好地查看數據。
編輯:加載的picks
將以Collections
的形式出現,因此您必須使用循環訪問它。 請嘗試以下操作:
foreach ($user->picks as $pick) {
echo $pick->schedule->gameTime;
}
如果只希望用戶優先pick
,則可以執行以下操作: $user->picks->first()->schedule->gameTime
我認為您正在尋找一個foreach循環:
$picks = User::find($user->id)->picks()->where('week', $currentWeek);
foreach ($picks as $pick){
$pickWhereGameStarted = $pick->schedule()->where('gameTime', '<', Carbon::now())->get();
}
試試看,看看它是否對您有用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.