Я новичок в Laravel и использую версию 6.
Я хочу, чтобы в моем представлении отображалась кнопка, если в одной из моих таблиц MySQL есть строки, соответствующие заданному c условие, но у меня возникают проблемы с выяснением, как его кодировать - и даже ГДЕ его кодировать - в моем Laravel приложении.
Моя таблица MySQL называется diary_entries, и различные пользователи системы будут вносить в нее от нуля до n строк. Каждая строка таблицы содержит идентификатор пользователя с именем client. Когда данный пользователь переходит в представление Welcome, я хочу, чтобы представление определило, есть ли у этого пользователя какие-либо строки в таблице diary_entries. Если он это сделает, я хочу отобразить кнопку, которая переместит его на другую страницу, где записи могут быть отображены, отредактированы или удалены.
Я думаю Я хочу создать @if, который подсчитывает количество записей для этого пользователя; если счет больше нуля, я хочу отобразить кнопку, в противном случае кнопка не отображается.
Проблема в том, что я не могу понять, как это кодировать. Я посмотрел примеры в разделе Eloquent руководства, но они мне не совсем понятны. Вверху я обнаружил заметку, в которой говорилось, что функция count () ожидает коллекцию в качестве аргумента и что результатом оператора Eloquent всегда является коллекция, поэтому я предположил, что мне просто нужно выполнить запрос Eloquent, а затем применить count () в получившуюся коллекцию. Но каждая вариация той идеи, которую я попробовал, порождала исключения.
Вот предположение, которое показалось мне наиболее логичным:
@extends('layout');
@section('content');
<div class="content">
<img class="centered" src="/images/sleeping-cat.jpg" alt="sleeping cat" height="250">
<div class="title m-b-md">
<h1> Sleep Diary </h1>
</div>
<div>
<h3>{{Auth::user()->name }}</h3>
</div>
<div>
@if (count(App\DiaryEntry::select('*')->where('client', Auth::user()->name) > 0))
<p>
<a class="btn btn-primary"> View / edit existing sleep diary entries </a>
</p>
@endif
</div>
<div>
<p>
<a class="btn btn-primary" href="/diaryEntries"> Create a new sleep diary entry </a>
</div>
</div>
@endsection
Это, очевидно, неправильно, потому что оно выдает исключение, так как мне сделать это правильно? Должно ли здание коллекции перемещаться в Контроллер? Если да, то как мне вызвать метод и увидеть его результат? Или я могу сделать что-то вроде того, что я уже сделал, но просто немного изменить синтаксис?
РЕДАКТИРОВАТЬ
Я подражал предложению Седева, но я получаю эту ошибку:
$count is undefined
Make the variable optional in the blade template. Replace {{ $count }} with {{ $count ?? '' }}
Вот мое приветствие:
@extends('layout');
@section('content');
<div class="content">
<img class="centered" src="/images/sleeping-cat.jpg" alt="sleeping cat" height="250">
<div class="title m-b-md">
<h1>Sleep Diary</h1>
</div>
<div>
<h3>{{ Auth::user()->name }}</h3>
</div>
<div>
@if ($count) > 0))
<p>
<a class="btn btn-primary">View/edit existing sleep diary entries</a>
</p>
@endif
</div>
<div>
<p><a class="btn btn-primary" href="/diaryEntries">Create a new sleep diary entry</a>
</div>
</div>
@endsection
И это соответствующая функция из DiaryEntryController:
public function countEntriesOneUser()
{
$count = DiaryEntry::select('*')->where('client', Auth::user()->name)->count();
view("welcome", compact("count"));
}
Должна ли компактная функция возвращать $ count вместо count? Я не могу найти компактную функцию в руководстве с функцией поиска, поэтому мне не ясно, что она делает или каков правильный синтаксис. Я только что попытался изменить последнюю строку функции на
view("welcome", $count);
, но это привело к той же ошибке.