не возвращать объект, если массив отношений пуст

ОБНОВЛЕНО

У меня красноречивый объект

$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": []
},

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

Другие решения

вы могли бы использовать whereHas способ поставить «где» условия на вашем has запросы вроде этого:

$storeCollections = StoreCollection::where('op_city_id', $opCity->id)
->where('isVisible', true)
->whereHas('storeCollectionStores')
...

Эти методы позволяют добавлять настраиваемые ограничения в ограничение отношений

Читать документы Вот

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector