#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 рад, что я смог помочь 🙂 отметьте как «Выбранный ответ», если это помогло вам в вашем решении.