Laravel Relation whereHas是Laravel框架中的一个关系查询方法,用于在关联模型中进行条件查询。它可以帮助我们根据关联模型的条件筛选出符合要求的主模型。 具体来说,Laravel中的关系查询方法分为两种:whereHas和orWhereHas。其中,whereHas用于筛选满足所有条件的关联模型,而orWhereHas用于筛选满足任一条件的关联模型。
在这里,relation是指父模型和关联模型之间的关系方法,可以是模型类中定义的任何关联关系,如belongsTo、hasOne、hasMany等。 使用whereHas方法,我们可以在关联模型上执行其他查询操作,例如使用where方法添加其他条件、使用orderBy方法进行排序等。这使得我们能够根据关联模型的属性进行过滤,并只返回满足条件的父模型。
我认为这是正确的方法:
我的搜索时基于Question Model的,发送的两条SQL中, 第一条SQL是查询了符合TYPE=1条件的QUESTION,LARAVEL对结果做了相应的缓存。(因为是基于QUESTION的MODEL,并且我使用了with(Relation)的语法)。 第二条Sql使用with(realtion)的语法是在给第一次的结果加载关联关系,所以这个问题就迎刃而解了。
}protectedfunctiongetPolymorphicFields(){$relation=$this->detail();return[$relation->getMorphType(),$relation->getForeignKey()]; } my Controller \App\Production\Models\Production::detailable(function ($query) {$query->whereDate('panen_future_date', '2017-02-08'); ...
return$builder->whereIn($relation->getForeignKey(),$in->select($relation->getOwnerKey()));}elseif($relationinstanceofRelations\HasOne){return$builder->whereIn($this->getKeyName(),$in->select($relation->getForeignKeyName()));}thrownewException(__METHOD__." 不支持 ".get_class($relation)...
return [$relation->getMorphType(), $relation->getForeignKey()]; } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. my Controller \App\Production\Models\Production::detailable(function ($query) { ...
第二个参数是当前模型类所属表的外键,在本例中是 user_profiles 表的 user_id 字段,拼接规则和 hasOne 那里类似,只不过这里是基于第四个参数关联关系名称 $relation: 第三个参数是关联模型类所属表的主键: 第四个参数前面已经说过,默认约定就是关联关系方法名,也是关联关系动态属性名。
$builder->whereHas($relation,$callback); $relation:要搜索的关联关系名称。 $callback:接收 Query Builder 实例作为参数的闭包函数。 实例 假设我们有两个模型,一个是用户模型(User),另一个是文章模型(Article),用户和文章之间是一对多的关系。每个用户可以有多篇文章。现在我们要搜索发布时间在过去一周内的,所...
Hashas() is to filter the selecting model based on a relationship. So it acts very similarly to a normal WHERE condition. If you just use has('relation') that means you only want to get the models that have at least one related model in this relation.Example:...