bugfix> php > 投稿

これはlaravelvuejsプロジェクトです。これが私の製品ページの写真です:

商品はそのページに表示されるはずでしたが、検索ボタンをクリックするまでは完全にヌルです。検索ボタンをクリックすると、ページに商品が読み込まれ、検索オプションも機能します。

私のコードは:

web.php->

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

Mastercontroller.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.log();
                    this.getdata = hi;
                    this.search = '';
                    this.showsearch = true;
                }).catch(err=>{
                    console.log(err);
                });
            }   
        
       },
   
   }
</script>

回答 1 件
  • 問題は、ページを初めてロードするときに、URLにクエリパラメータがないため、次の行にあることです。

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

    初めて実行するクエリは次のとおりです。

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

    以下の構文を使用して、デフォルトのパラメータを設定できます

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

    PD:SQLインジェクションに注意してくださいこれを読んでください

    編集: また、あなたのコンポーネント呼び出しでマウントメソッドmakesearch方法。

    data(){
        ...
    }
    ...
    mounted(){
       this.makesearch()
    }
    
    
    

あなたの答え