Как показать только все статьи, содержащие определенное значение?

#php #laravel #laravel-blade

Вопрос:

В настоящее время, используя Laravel 8, я должен показывать на странице все статьи, но только те, которые содержат определенное значение строки в моей базе данных. Например, в этом у меня есть столбец в нужной таблице, который называется «is_reserved», поскольку он действует как Истина или ложь (1-0).

Я искал абсолютно везде и не могу понять и найти правильный синтаксис для фильтрации и отображения только тех статей, которые не зарезервированы (is_reserved = 0).

В моем файле представления блейда у меня есть цикл @foreach, который извлекает мой элемент с моего контроллера, как показано ниже. Что, кстати, работает, просто не так, как я намереваюсь. У меня закончились идеи.

TL:DR: Я просто хочу иметь возможность отображать все элементы из моей базы данных, но только те, у которых есть определенное значение строки.

 <section class="row justify-content-evenly mt-5 mx-sm-3">
    @foreach ($donations as $donation)
    <article class="box col-md-5 col-sm-12 row p-3 mt-md-3 mt-sm-5 d-flex justify-content-around">
        <img src="{{ $donation->image }}" alt="image" class="col" style="border-radius: 100%;">
        <div class="col">
            <p style="text-align: justify;">{{ Str::limit($donation->description, 80) }}</p>
            <div class="d-flex justify-content-start flex-column text-left" style="width: auto; height: 100px;">
                <h5>Location: Quebec</h5>
                <p>Meteo: Cold</p>
                <div class="row justify-content-between">

                    <button class="col-5 btn yellowBtn">reserve</button>
                    <a class="col-5 btn greenBtn" href="{{route('view-item', $donation->id)}}">View</a>

                </div>
            </div>
        </div>
    </article>
    @endforeach
 

Комментарии:

1. » Я искал абсолютно везде и не могу ни понять, ни найти правильный синтаксис […] » — На самом деле это довольно легко найти в официальной документации: laravel.com/docs/8.x/queries#basic-where-clauses или laravel.com/docs/8.x/eloquent#building-queries … Примечание: вы выполняете запросы не в своем представлении, а в своем контроллере.

2. просто определите ключ как целое число при приведении вашей модели, а затем установите, где условие ->где(‘is_reserved’, 1) > laravel.com/docs/8.x/eloquent-mutators#attribute-casting

Ответ №1:

Переместите логику на контроллер / службу перед циклическим перебором, затем отправьте необходимые строки в колонку (возможно, с $is_reserved логическим значением в массиве/объекте)

Имейте в виду, что если вы погружаетесь в логику в самом файле блейда / шаблона, лучше всего переместить его на шаг назад и просто предоставить шаблону самые простые данные, которые вы можете.

Взяв ваш вопрос в качестве примера, прежде чем отправлять строки в шаблон, просто покажите те, которые соответствуют вашим потребностям.

напр.

 $rows = DB::table('your_table')->where('is_reserved', '1')->get();
return $rows; //or extend your template here
 

В противном случае вы можете добавить @if условие прямо в свой шаблон и выполнить рендеринг только при соблюдении условия ceratin

Комментарии:

1. Я попытался выполнить условие if сразу после моей строки @foreach, и оно работает сейчас. Спасибо за ответ! 🙂

2. @Antony_Web рад, что я смог помочь 🙂 отметьте как «Выбранный ответ», если это помогло вам в вашем решении.