Запрос Laravel для получения списка результатов

#laravel #if-statement #foreach

#laravel #if-statement #foreach

Вопрос:

Я пытаюсь написать запрос, который берет коллекцию записей, перебирает их и отображает их все, но мне нужно, чтобы скрыть определенную запись, если одна запись содержит поле как true.

Пример использования

  1. Захватите коллекцию продуктов, где purchased поле имеет значение true
  2. если для продукта из коллекции установлено значение includes_bonus true, перечислите ВСЕ продукты, кроме bonus продукта с идентификатором 2

1.

Это захватывает все приобретенные продукты, для которых установлено значение true

 $productsPurchased = $user->products()->where('purchased', 1)->get();
  

2 попытка

Ниже я пытаюсь сделать выше, но мне не очень повезло.

  1. Захватите все продукты с приобретенным значением, равным 1 (true)

  2. если продукт 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 так, и все в порядке, я использовал это раньше