#laravel #relationship
Вопрос:
Я пытаюсь остановить возвращение «дополнений» в группу дополнений, если в ней нет «productAddon».
Есть ли способ, которым этого можно достичь?
Текущий Код:
$addonGroups = AddonGroup::whereIn("id", $addonGroups)
->whereHas(['addons.productAddon' => function ($query) use ($customise) {
$query->where('product_reference', $customise->package_reference);
}])
->with('addons')
->with(['addons.productAddon' => function ($query) use ($customise) {
$query->where('product_reference', $customise->package_reference);
}])
->with('addons.removals')
->get()->each(function($addonGroup) {
foreach ($addonGroup->addons as $key => $value) {
if ($value["image_key"]) {
$value["image_key"] = env("AWS_UPLOADS_URL") . $value["image_key"];
}
}
});
«дополнения»:
public function addons() {
return $this->hasMany("AppAddon", "addon_group_id", "id")->where('active', 1);
}
«продуктАддон»:
public function productAddon() {
return $this->hasOne("AppProductAddon", "addon_id", "id")->without('product');
}
Ошибка с текущим решением:
Call to a member function getRelationExistenceQuery() on array
Ответ №1:
После большого количества кофе и проведения нескольких тестов я, наконец, ответил на свой собственный вопрос и придумал это решение:
$addonGroups = AddonGroup::whereIn("id", $addonGroups)
->with(["addons" => function ($query) use ($customise) {
$query->whereHas("productAddon", function ($builder) use ($customise) {
$builder->where('product_reference', $customise->package_reference);
})
->with('productAddon', 'removals');
}])
->get();