我的User
模型中有一个方法,该方法应该返回该用户的所有到期资格(以便就此警告employers
)。
每个Qualification
都有一个days_before_warning
字段,该字段指定多少天在employers
到期之前应予以警告。
这是我的方法:
return $this->qualifications()
->wherePivot('valid_until', '!=', null)
->wherePivot('valid_until', '<=', Carbon::today()->subDays('days_before_warning'))
->get();
当然,days_before_warning
不能那样使用。
如何访问days_before_warning
属性以将其与valid_until
数据透视表属性进行比较?
答案 0 :(得分:0)
我认为您需要mysql DATE_SUB
函数。像这样:
return $this->qualifications()
->wherePivot('valid_until', '!=', null)
->wherePivot('valid_until', '<=', DB::raw('DATE_SUB(NOW(), INTERVAL days_before_warning DAYS')))
->get();
答案 1 :(得分:0)
您可以创建一个自定义枢轴模型并为此指定一个get访问器。它避免使用不必要的查询。
class QualificationsPivot extends Pivot{
public function getValidAttribute(){
return $this->attributes['valid_until'] <= $this->atttributes['days_before_warning']
}
}
只要您修改用户模型上的关系方法以包括using():
return $this->belongsToMany(Qualifications::class, 'qualifications_pivot_table_name', 'user_id', 'qualifications_id')
->using(QualificationsPivot::class)
->withPivot(['valid_until', 'days_before_warning']);
这应该允许您致电:
$this->Qualifications->where('pivot.valid', true);
获取所有有效条件为mutated的资格。我不确定您的关系方法是什么样子,但是我假设您渴望使用with()方法加载资格。我在其中一种枢轴模型上对其进行了测试,并且看起来工作正常。如果您还有其他问题,请告诉我。请参阅下面的一些参考:
我发现一些这样的问题可能对此有用(数据透视模型上的变量): laravel/eloquent mutators/accessors in a pivot table
编辑:也遇到了这个问题:https://laracasts.com/discuss/channels/eloquent/how-to-define-an-accessor-for-a-pivot-table-attribute?page=1
它指出您应该只能够在父模型(用户)上提供访问器。虽然我尚未对其进行测试,但是如果您不需要自定义数据透视模型附带的其他功能,则它可能是一个更简单的选择。