Как использовать количество строк в @if в представлении Laravel? - PullRequest
1 голос
/ 18 февраля 2020

Я новичок в 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);

, но это привело к той же ошибке.

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Попробуйте,

@php
$count=\App\DiaryEntry::where('client', Auth::user()->name)->count();
@endphp
@if($count>1)
 <p><a class="btn btn-primary">View/edit existing sleep diary entries</a></p>
@endif
0 голосов
/ 18 февраля 2020

Использование App\DiaryEntry::select('*')->where('client', Auth::user()->name) непосредственно в шаблоне блейда - плохая практика.

Вы можете выполнить свой вопрос в методе контроллеров, а затем передать результат в файл представления

Ваша функция

function test(){

    $count = DiaryEntry::select('*')->where('client', Auth::user()->name)->count();  // get the total no of records using count
    view("index", compact("count")) // pass your count variable here

}

, затем вы можете непосредственно используйте $count в вашем @if состоянии

Ваш шаблон лезвия

<div>
    @if ($count > 0)
    <p><a class="btn btn-primary">View/edit existing sleep diary entries</a></p>
    @endif
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...