К сожалению, нет способа передать массив отношений в has()
или whereHas()
, но вместо этого вы можете использовать QueryScope
. На вашем Model
определите следующее:
public function scopeCheckRelationships($query){
return $query->has("relationship1")->has("relationship2")->has("relationship3");
}
Затем при запросе Model
в Controller
просто запустите:
$result = Model::checkRelationships()->get();
Имя функции для использования 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