Как остановить возврат записей, если отношения не существуют (Laravel)

#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();