Как разрезать петлю foreach в лезвии ларавеллы - PullRequest
0 голосов
/ 14 октября 2019

Есть ли способ разбить результаты красноречивого поиска при использовании его в blade-сервере? Я спрашиваю, поскольку у меня есть карусель начальной загрузки, которая состоит из 2 слайдов, разделенных на 3 колонки в каждом слайде. Мне бы хотелось, чтобы каждый слайд заполнялся результатами следующего поиска:

 $alsoBought = Game::where('category_id', $showGames['category_id'])->paginate(6);

Как видите, он возвращает 6 результатов. Есть ли способ разбить его так, чтобы на каждом слайде было 3 результата? Вот мой код слайда:

<div id="carouselExampleSlidesOnly" class="carousel slide" data-ride="carousel">
            <div class="carousel-inner">
                <div class="carousel-item active">
                    <div class="row">
                        @foreach($alsoBought->take(3) as $bought)
                        <div class="col-4"><img class="w-100" src="{{ $bought['image'] }}" alt="First slide"></div>
                        @endforeach
                    </div>
                </div>
                <div class="carousel-item">
                    <div class="row">
                        @foreach($alsoBought as $bought)
                            <div class="col-4"><img class="w-100" src="{{ $bought['image'] }}" alt="First slide"></div>
                        @endforeach
                    </div>
                </div>
            </div>
        </div>

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Представьте себе ситуацию, когда у вас есть 10 записей для показа в Blade, но вам нужно показать их в 2 разделах, по пять записей в каждой. Есть довольно хороший трюк, как это сделать в цикле @foreach: chunk.

Попробуйте это.

<div id="carouselExampleSlidesOnly" class="carousel slide" data-ride="carousel">
            <div class="carousel-inner">
            @foreach($alsoBought->chunk(3) as $bought)
                <div class="carousel-item @if($loop->first) {{ 'active' }} @endif">
                    <div class="row">

                        @foreach($bought as $item)
                            <div class="col-4"><img class="w-100" src="{{ $item['image'] }}" alt="First slide"></div>
                        @endforeach 

                    </div>
                </div>
            @endforeach

            </div>
        </div>
2 голосов
/ 14 октября 2019

Вы можете использовать chunk() в коллекции вместо take() и передавать желаемое количество предметов в каждом чанке

@foreach($alsoBought->chunk(3) as $three)
<div class="carousel-item @if ($loop->first) active @endif">
  <div class="row">
    @foreach($three as $bought)
      <div class="col-4"><img class="w-100" src="{{ $bought['image'] }}" alt="First slide"></div>
    @endforeach
  </div>
</div>
@endforeach

Из документов

Метод chunk разбивает коллекцию на несколько меньших коллекций заданного размера:

$collection = collect([1, 2, 3, 4, 5, 6, 7]);

$chunks = $collection->chunk(4);

$chunks->toArray();

// [[1, 2, 3, 4], [5, 6, 7]]

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...