#laravel #eloquent
#laravel #красноречивый
Вопрос:
У меня есть модель со связанной коллекцией
теперь я выполняю этот запрос
$data = DeliveryPartner::when($filter, function ($q) use ($request) {
})
->with(['orders' => function ($query) {
$query
->where('delivery_partner_invoice_id', '=', '')
->orWhereNull('delivery_partner_invoice_id')
->whereIn('status', ['payment-accepted', 'completed', 'full-refund', 'partial-refund']);
}])->get();
Теперь мне интересно. Если orders возвращает пустой, возможно ли удалить этого родителя из коллекции?
Я знаю, что могу сделать это после запроса eloquent с циклом. Но возможно ли это сделать в запросе?
Ответ №1:
мы не можем полностью удалить эту родительскую коллекцию (с индексом), НО вы можете установить их, null
используя transform() следующим образом;
$data = DeliveryPartner::when($filter, function ($q) use ($request) {
})
->with(['orders' => function ($query) {
$query
->where('delivery_partner_invoice_id', '=', '')
->orWhereNull('delivery_partner_invoice_id')
->whereIn('status', ['payment-accepted', 'completed', 'full-refund', 'partial-refund']);
}])->get()->transform(function($item){
if(!$item->orders->count() ){
return;
}
return $item;
});
Примечание: это не приведет к полному удалению этих родительских элементов, но установит их пустыми.
Комментарии:
1. Вы также можете объединить их в цепочку
->filter()->values()
для фильтрации нулевого значения, после чего возвращает новую коллекцию со сброшенными ключами