已更新
我有雄辩的对象
$storeCollections = StoreCollection::where('op_city_id', $opCity->id)
->where('isVisible', true)
->has('storeCollectionStores','>', 0)
->with([
'storeCollectionStores' => function ($query) use ($storeIds) {
$query->whereIn('store_id', $storeIds)->with(['store' => function ($query){
$query->select('id', 'ref', 'tagline', 'type', 'budget', 'cover', 'has_manager',
'timezone', 'priority', 'op_city_id', 'currency_id', 'ref_translation', 'tagline_translation')
->with([
'currency',
'storeTags.tag',
'labels' => function ($query) {
$query->select('id', 'label', 'store_id', 'label_translation');
},
]);
}])
->orderBy('priority', 'asc');
}
])
->orderBy('priority')
->get();
如果 storeCollectionStore 为空,我将得到空数组。
如果关系为空,我想删除整个集合
有什么建议吗?
结果是这样的
"storeCollections": [
{
"id": 9,
"title": "Our Favorites",
"desc": "Choose from our all-time favorite stores",
"priority": 0,
"isVisible": true,
"op_city_id": 1,
"created_at": "2018-11-08 11:11:18",
"updated_at": "2018-11-08 11:11:18",
"title_ar": "المفضلة لدينا",
"desc_ar": "اختر من بين جميع المتاجر المفضلة على",
"store_collection_stores": []
},
答案 0 :(得分:1)
您可以在外部集合上应用过滤器,以检查内部storeCollectionStores集合是否包含元素。
$filteredCollection = $collection->filter(function($store) {
return $store->storeCollectionStores->count() > 0;
});
您也可以只使用whereHas()
,并在查询本身上使用与with()
类似的闭包。 whereHas
限制查询结果,with
加载相关数据。您需要同时过滤和加载。
https://laravel.com/docs/5.7/eloquent-relationships#querying-relationship-existence
答案 1 :(得分:0)
您可以使用whereHas
方法在has
查询中添加“ where”条件,如下所示:
$storeCollections = StoreCollection::where('op_city_id', $opCity->id)
->where('isVisible', true)
->whereHas('storeCollectionStores')
...
这些方法允许您将自定义约束添加到关系约束
阅读文档here