Laravel嵌套查询多重关系

时间:2019-08-14 18:48:43

标签: php laravel eloquent

我正在运行一个查询,其中必须根据公司或品牌或两者的组合来过滤产品。

下面是我正在使用的查询。

arr = [{book:"2"},{phone:"3"},{television:"10"}]

newarr = arr.map(obj => Object.entries(obj)[0])
console.log(newarr)
// [ [ 'book', '2' ], [ 'phone', '3' ], [ 'television', '10' ] ]

但是我面临一个问题。我的品牌或公司关系对象无论是否匹配都为空。因此,在打印时,我无法访问数据。

$products = ProductInventoryMapping::with([
    'distributor',
    'product.unit',
    'product.subbrand',
    'product.brand' => function ($query) use ($search_brand) {
        if(strlen($search_brand) > 0) {
            $query->where('name', 'like', '%'.$search_brand.'%');
        }
    },
    'product.brandcompany' => function ($query) use ($search_company) {
        if(strlen($search_company) > 0) {
            $query->where('name', 'like', '%'.$search_company.'%');
        }
    }
])->where('user_id', $id)->get()
Trying to get property 'name' of non-object", exception: "ErrorException

1 个答案:

答案 0 :(得分:0)

您确定存在这种关系吗?如果某些产品没有品牌或品牌公司,那么您有2种选择

  • 使用haswhereHas来确保只获取具有关系的对象。
  • 在尝试访问关系值之前检查该关系是否为空