laravel - 为关系添加条件

时间:2015-08-31 06:44:52

标签: php sql laravel eloquent

我有两个模型“频道”和“时间表”,其中一个频道有多个时间表(一对多)。我想要做的是获取今天包含时间表的频道,并且时间表需要按日期排序ASC,每个频道也限制10个时间表。

我编写了以下代码,但有时会返回错误的结果。我检查了它,发现laravel生成一个SQL查询,因此限制了所有通道的计划结果。我正在使用Eloquent。有谁知道怎么做?...谢谢。

$channels = $this->channels->whereHas('tvSchedules', function($q)
                {
                    $q->where('day', date('Y-m-d', strtotime(Carbon::now()->toDateString())))
                        ->where('end_time', '>=', Carbon::now()->toTimeString());

                })->with(['tvSchedules' => function($q){
                    $q->where('day', date('Y-m-d', strtotime(Carbon::now()->toDateString())))
                        ->where('end_time', '>=', Carbon::now()->toTimeString())
                        ->with('tvScheduleImages')
                        ->take(10)
                    ;
                }]);
SQL:

select * from `trn_tv_schedule` where `trn_tv_schedule`.`channel_id` in (1, 2) and `day` = '2015-08-31' and `end_time` >= '06:11:34' limit 10

1 个答案:

答案 0 :(得分:0)

尝试在模型中使用雄辩的关系 像

// Channel Model
public function schedules()
{
    return $this->hasMany('Schedule');
}
// Schedule Model
public function Channel()
{
    return $this->belongsTo('Channel');
}

如果您使用的是laravel 5.0,那么请看一下 - Eloquent Relationships