【问题标题】:How to stop records coming back if relationship doesn't exist (Laravel)如果关系不存在,如何停止记录返回(Laravel)
【发布时间】:2021-09-19 17:35:12
【问题描述】:

如果 AddonGroup 没有“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("App\Addon", "addon_group_id", "id")->where('active', 1);
}

'productAddon':

public function productAddon() {
    return $this->hasOne("App\ProductAddon", "addon_id", "id")->without('product');
}

当前解决方案出错:

Call to a member function getRelationExistenceQuery() on array

【问题讨论】:

    标签: laravel relationship


    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      • 2014-03-09
      • 2015-12-17
      • 1970-01-01
      • 2018-01-14
      • 2018-02-11
      • 2017-06-02
      相关资源
      最近更新 更多