Фильтр поиска не получает данные, пока не нажмет кнопку поиска

Это проект laravel vuejs. Вот фото моей страницы продукта:

Товары должны были отображаться на этой странице, но она полностью пуста, пока я не нажму кнопку поиска. После нажатия на кнопку поиска страница загружает продукты, и опция поиска также работает.

Мои коды:

веб.php ->

Route::get('/', 'App\Http\Controllers\Mastercontroller@index');

Route::get('/search', 'App\Http\Controllers\Mastercontroller@search');

Route::any('{slug}', 'App\Http\Controllers\Mastercontroller@index');

Мастерконтроллер.php ->

<?php

namespace App\Http\Controllers;

use App\Models\myproductcase;
use Illuminate\Http\Request;

class Mastercontroller extends Controller
{
     public function index(){
        return view('welcome');
     }

     public function search(Request $r){
    
        $search = $r->get('q');
        return myproductcase::where('name','LIKE','%'.$search.'%')->get();
     }
 }

страница продукта ->

   <template>
   <div>

   <div class = "search"><input v-model = "search" type=text></input><button 
   @click.prevent = "makesearch()">Search</button></div>
     
     <div class = "product-list">
        <div v-if = "showsearch==true"> 
             <div v-for = "getresult in getdata" v-bind:key = "getresult.id">
                    <div class = "product">
                    <h1>{{getresult.name}}</h1>
                    <h3>{{getresult.price}}</h3>
                    <p>{{getresult.description}}</p>
             </div>    
        </div> 
        <div v-if = "showsearch==false">
            no data found
            </div>    
         </div>               
      </div>
    </div>  
</template>
<script>
export default{
    data(){
        return{
        search : '',
        showsearch : false,
        getdata : []
     }
   },
   methods : {
       async makesearch(){
            fetch('/search?q='+this.search).then(hi=>hi.json()).then(hi=>{
                    console.info();
                    this.getdata = hi;
                    this.search = '';
                    this.showsearch = true;
                }).catch(err=>{
                    console.info(err);
                });
            }   
        
       },
   
   }
</script>

Вопрос в том, что продукт не загружается до того, как я нажму кнопку поиска, я хочу, чтобы продукты отображались автоматически, опция поиска должна работать как фильтр

Shishir 09.12.2020 19:23

(1) вы хотите выполнить поиск сразу после загрузки страницы? (2) при вводе текстового поля хотите выполнить поиск и отобразить данные, не нажимая кнопку поиска?

Nilesh Patel 09.12.2020 19:41

если вы хотите попробовать (2), как указано @NileshPatel, попробуйте использовать часы

bhucho 09.12.2020 19:45

@nilesh patel @ bhucho нет, брат, я пытался отобразить все продукты, как только страница загружается. Я получил решение, хотя - спасибо за ваше время и мысли

Shishir 09.12.2020 19:49
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
281
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что когда вы загружаете страницу в первый раз, в вашем URL-адресе нет параметра запроса get, поэтому в строке

$search = $r->get('q'); // Is equal to NULL

Запрос, который вы делаете в первый раз:

return myproductcase::where('name','LIKE','%NULL%')->get();

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

$search = $r->get('q', 'default value' );

PD: Будьте осторожны с SQL Injection Прочтите это

Редактировать: Также в вашем компоненте вызовите в смонтированном методе метод makesearch.

data(){
    ...
}

...

mounted(){
   this.makesearch()
}

спасибо за ваш ответ, но у меня есть другое решение, использующее created() для загрузки всех данных в первый раз - это плохая практика?

Shishir 09.12.2020 19:47

Я отредактировал свой ответ, я всегда использую смонтированный метод. Проведите исследование жизненного цикла компонентов в Vue.

fluid undefined 09.12.2020 19:51

@Shishir, если у вас меньше данных, их можно загрузить в Mounted (), но если у вас огромный набор данных, это не лучший подход. В этом случае позвольте пользователю искать конкретные данные.

Nilesh Patel 09.12.2020 19:53

Вы имеете в виду, что я не должен размещать все данные на одной странице?

Shishir 09.12.2020 19:57

Добавление разбиения на страницы решило бы проблему тарификации огромного количества данных.

fluid undefined 09.12.2020 20:49

Другие вопросы по теме