#laravel #if-statement #foreach
#laravel #if-statement #foreach
Вопрос:
Я пытаюсь написать запрос, который берет коллекцию записей, перебирает их и отображает их все, но мне нужно, чтобы скрыть определенную запись, если одна запись содержит поле как true.
Пример использования
- Захватите коллекцию продуктов, где
purchased
поле имеет значение true - если для продукта из коллекции установлено значение
includes_bonus
true, перечислите ВСЕ продукты, кромеbonus
продукта с идентификатором 2
1.
Это захватывает все приобретенные продукты, для которых установлено значение true
$productsPurchased = $user->products()->where('purchased', 1)->get();
2 попытка
Ниже я пытаюсь сделать выше, но мне не очень повезло.
-
Захватите все продукты с приобретенным значением, равным 1 (true)
-
если продукт
includes_bonus
равен 1 (true), скройте запись продукта с идентификатором 2 из списка продуктов.$productsPurchased = $user->products()->where('purchased', 1) ->where('includes_bonus', 1) ->where('products.id', '!==', 2) ->get();
блейд
Затем я хочу выполнить foreach внутри блейда, в котором перечислены все продукты с моим вариантом использования.
@foreach($purchasedProducts as $purchasedProduct)
<div class="col-xl-6 p-0 p-xl-4 mb-5 mb-xl-0">
<div class="card border">
<div class="card-header border rounded-top"
</div>
<div class="card-block">
@endforeach
Ответ №1:
Попробуйте коллекцию «filter»
$productsPurchased->filter(function ($value, $key) {
return '**condition for filter**';
});
Комментарии:
1. Как мне настроить синтаксис в возвращаемом условии, чтобы он соответствовал тому, что мне нужно?
2. $productsPurchased->filter(function($value) { return !empty($value); }) сам фильтр удаляет пустое значение, я просто исправляю его для справки.
3. покажите свой ответ и то, что вы хотите удалить из этого ответа.
4. я хочу сделать if($productPurchased->includes_bonus) { // отфильтровать продукт, например (
benefits.id
, !=, 2) }5. Я в основном просто хочу захватить коллекцию, и если запись имеет
includes_bonus
значение true, то удалитеproduct
2 из коллекции
Ответ №2:
Попробуйте это вместо:
$productsPurchased = $user->products()->where('purchased', 1);
if($user->products()->where('includes_bonus', 1)->first()){
$productsPurchased=$productsPurchased->where('products.id', '!=', 2);
}
$productsPurchased=$productsPurchased->get();
Комментарии:
1. $productsPurchased=$productsPurchased неверный синтаксис вы не возражаете изменить свой ответ?
2. Это
$productsPurchased=$productsPurchased->get();
не$productsPurchased=$productsPurchased
так, и все в порядке, я использовал это раньше