Laravel多个模型雄辩的关系设置?

时间:2015-10-13 21:36:57

标签: php laravel eloquent relationship laravel-5.1

我有3个模特

User Pick Schedule

我正在尝试执行以下操作

$picksWhereGameStarted = User::find($user->id)
                                ->picks()
                                    ->where('week', $currentWeek)
                                    ->first()
                                ->schedule()
                                    ->where('gameTime', '<', Carbon::now())
                                    ->get();

此代码仅返回集合中的一个数组。如果结果超过1,我希望它返回多个数组。

我可以用->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');
}

2 个答案:

答案 0 :(得分:1)

由于您已经拥有User模型(在find方法中使用$user->id方法),因此您只需加载其Pick关系并加载Pick关系Schedule 1}} S&#39; 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'); 列。试试这个。

user

编辑:上面的代码应该返回picks schedules.gameTime < Carbon::now() $user

尝试并转储Eloquent对象以查看加载的关系。这是您想要的$user->toArray()方式。

提示:在转储$user之前,您可能需要picks才能更好地查看数据。

修改 加载的Collections将采用foreach ($user->picks as $pick) { echo $pick->schedule->gameTime; } 的形式,因此您必须使用循环访问它。请尝试以下方法:

pick

如果您只想要用户提供的第一个$user->picks->first()->schedule->gameTime:{{1}}

答案 1 :(得分:0)

我认为foreach循环可能是您正在寻找的东西:

Sub test()

'click action 'when cell(1,1) is clicked and if cells(1,1) is 1, msgbox saying "hi" will show up, if not nothing If Cells(1, 1) = 1 Then
    MsgBox "hi"
    Else 
End If
End Sub

试试这个,看看它是否适合你