laravel - 在 Laravel Eloquent 中,如何检查一个“有”中是否存在多个关系?
问题描述
因此,为了检查模型上是否存在关系,我们使用关系上的has
函数,例如model1->has('relationship1')
。
虽然可以为model1->with()
函数提供关系数组以预先加载它们,但has
和whereHas
函数都不接受数组作为参数。如何检查是否存在多个关系?
现在,我has
在同一个模型上运行多个函数(关系不是嵌套的):
model1->has('relationship1')
->has('relationship2')
->has('relationship3')
但这是乏味且容易出错的。解决方案有人吗?
解决方案
不幸的是,没有办法将关系数组传递给has()
or whereHas()
,但您可以使用 aQueryScope
代替。在您的 上Model
,定义以下内容:
public function scopeCheckRelationships($query){
return $query->has("relationship1")->has("relationship2")->has("relationship3");
}
然后,在查询您的Model
in a时Controller
,只需运行:
$result = Model::checkRelationships()->get();
使用 a 的函数名是函数名Scope
,减去单词scope
,所以scopeCheckRelationships()
用作checkRelationships()
。
此外,实际上可以将要查询的关系作为参数传递:
public function scopeCheckRelationships($query, $relationships = []){
foreach($relationships AS $relationship){
$query->has($relationship);
// Might need to be `$query = $query->has(...);`, but I don't think so.
}
return $query;
}
...
$result = Model::checkRelationships(["relationship1", "relationship2", "relationship3"])->get();
如果您需要它是动态的。
如果您需要更多信息,这里是查询范围的文档:https ://laravel.com/docs/5.8/eloquent#query-scopes
推荐阅读
- python - python数据类没有属性post_init
- mysql - 如何在mysql中生成季度报告并按一年中的每个季度汇总
- ios - Swift / HTTPS - 收到无效的标头 HTTP 标头字段
- amazon-web-services - longhorn 和 ebs 以及自动缩放组
- android - google maps on android 9 crash “Failed resolution of: Lorg/apache/http/ProtocolVersion”
- html - 与社交媒体图标发生冲突的文本
- mysql - 如果 Joining table 没有特定的外部 id,则返回 Null
- c# - DynamicMethod 调用泛型方法的问题
- c# - 无法使用 angular js 使用 asp.net core mvc 获取和发布数据
- java - 无法理解数据更改通知如何与 Android 中的 Firestore 一起使用。谁能解释一下?