Поиск в Laravel - PullRequest
       3

Поиск в Laravel

1 голос
/ 03 мая 2020

Я создал простой поиск в Laravel, чтобы найти материал по поисковому запросу

Контроллер

   public function search()
    {   
       $search = request()->query('search');
       $data = array();
       $data['books'] = Book::where('name', 'LIKE', "%{$search}%")->simplepaginate(12);
       $data['authors'] = Author::where('name', 'LIKE', "%{$search}%")->simplepaginate(12);

       return view('search', compact("data"));
    } 

Blade

                  @if(is_null(($data['books']) || ($data['authors'])))
                      <h2>Not Found, please try using another search term</h2><br/><br/>
                  @endif

                  @foreach($data['books'] as $book)
                          <a href="{{ route('book', $book->id) }}" target="_blank">
                            <img src="{{ secure_asset($book->image_url) }}" class="img-responsive" alt="{{$book->image_url}}">
                          </a>
                        <p class="author">{{ $book->author->name }}</p>
                        <h1 class="book-title">{{str_limit($book -> name, 20) }}</h1>
                  @endforeach

                  @forelse($data['authors'] as $author)
                        <a href="{{ route('author', $author->id) }}" target="_blank">
                          <img src="{{ secure_asset($author->image_url) }}" class="img-responsive" alt="{{$author->image_url}}">
                        </a>
                      <p class="author"></p>
                      <h1 class="book-title">{{str_limit($author -> name, 20) }}</h1>
                 @endforeach

Я пытаюсь сказать:

Not Found, попробуйте использовать другой поисковый термин

Когда поисковый запрос не может быть нашел. Но это не работает для меня

          @if(is_null(($data['books']) || ($data['authors'])))
                  <h2>Not Found, please try using another search term</h2><br/><br/>
          @endif

Не возвращает Не найдено

1 Ответ

2 голосов
/ 03 мая 2020

Это потому, что даже без повторов значение $data['books'] или $data['authors'] не равно нулю, это пустая коллекция. Таким образом, вы должны проверить количество результатов:

      @if(!$data['books']->count() || !$data['authors']->count())
              <h2>Not Found, please try using another search term</h2><br/><br/>
      @endif

или использовать метод isEmpty():

      @if($data['books']->isEmpty() || $data['authors']->isEmpty())
              <h2>Not Found, please try using another search term</h2><br/><br/>
      @endif

также, на самом деле это должен быть оператор И, ИЛИ, ИМО:

или используйте метод isEmpty():

      @if($data['books']->isEmpty() && $data['authors']->isEmpty())
              <h2>Not Found, please try using another search term</h2><br/><br/>
      @endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...