簡體   English   中英

Laravel多種模型雄辯的關系設置?

[英]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關系並按如下所示加載那些PickSchedule

編輯:假設您有一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM