我有一个表叫做jobs
和addresses
,它们有一对一的多态关系,在jobs
表中有一列has_office
,这列表示一个作业是否需要地址。
我需要创建一个查询范围,该范围只能查询Job::valid()
有效的作业。有效的意义在于,如果作业的has_office
设置为true,则它需要在addresses
表中有一个地址示例才有效。但是,如果设置为false,则不需要地址。
如果尝试:
public function address()
{
return $this->morphOne(Address::class, 'addressable');
}
//QUERY SCOPES
public function scopeValid()
{
return $this->has('address');
}
但并不是我想要的那样。
3条答案
按热度按时间uajslkp61#
范围必须返回查询生成器示例。
然后您可以像下面这样使用它
或
以及
ruoxqz4g2#
您可以修改scopeValid()查询作用域,以处理作业和地址表之间的多态关系,如下所示:
o8x7eapl3#
你需要修改scopeValid函数来包含对has_office列的检查。下面是一个如何修改代码的例子:
确保对作业模型调用scopeValid函数,如下所示: