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 关系时添加额外的约束