laravel - 为关系添加条件

Posted

技术标签:

【中文标题】laravel - 为关系添加条件【英文标题】:laravel - add conditions to relationships 【发布时间】:2015-11-25 03:18:29 【问题描述】:

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

我编写了以下代码,但有时会返回错误的结果。我检查了它,发现 laravel 生成了一个 SQL 查询,因此限制了所有频道的日程安排结果。我正在使用雄辩的。有人知道怎么做吗?...谢谢。

$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】:

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

// Channel Model
public function schedules()

    return $this->hasMany('Schedule');

// Schedule Model
public function Channel()

    return $this->belongsTo('Channel');

如果你使用的是 laravel 5.0,那么看看这个 - Eloquent Relationships

【讨论】:

以上是关于laravel - 为关系添加条件的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 6:如何将多个 where 子句添加到关系中

在 laravel 中定义 eloquent 关系时添加额外的约束

Laravel 为关系添加/查找关系

markdown 为Laravel Relations添加更多条件

Laravel:如何设置带有条件的自定义列?

Laravel - 具有关系条件