【发布时间】:2017-09-25 15:13:05
【问题描述】:
我需要获取所有appeals,其中appeal_stage.expiration_date 小于NOW()。
现在我有以下解决方案:
public function scopeExpired($query) {
$query->join('appeal_stage', 'appeals.id', 'appeal_stage.appeal_id')
->where('appeal_stage.expiration_date', '<=', new Expression('NOW()'));
}
所以,我想问一下 - 有没有更方便的方法来执行这个请求?
我的建议是以某种方式使用Illuminate\Database\Eloquent\Relations\Pivot,但我不明白,如何在这里使用 Pivot。
UPD 1
模型有下一个关系:
public function stages()
{
return $this->belongsToMany(Stage::class)->withPivot('prolongated_count', 'expiration_date')->withTimestamps();
}
public function appeals() {
return $this->belongsToMany(Appeal::class);
}
【问题讨论】:
-
您的表
appeal_stage是一个数据透视表。我会尝试使用 Eloquent 关系和wherePivot()方法,而不是在您的范围方法中手动加入它们。 -
wherePivot()将按条件过滤Stage,而不是Appeal。 -
您是如何定义模型中的关系的?请分享您的模型
标签: php laravel pivot laravel-eloquent laravel-5.5