2017-08-01 79 views
2

我一直在Laravel的where聲明中遇到問題。我用它來從數據庫中獲取數據,然後將其推爲實時搜索:Laravel Database'Where'語句分支搜索

$launchsitesatellite = DB::table('satellites') 
    ->orWhere('satname','LIKE','%'.$request->search.'%') 
    ->orWhere('norad_cat_id','LIKE','%'.$request->search.'%') 

我需要添加此過濾來自數據庫的結果:->where('site', $site_code)

我試着在上面添加where聲明,但是當我嘗試在我的輸入中輸入內容時,它打破了我的實時搜索並導致500服務器錯誤。我可以使用->where('site', $site_code)僅顯示數據庫中的數據,但不搜索它。

我的問題是:爲什麼->where('site', $site_code)查詢會中斷搜索,您將如何解決?

編輯:我的控制器代碼片段:

if ($request->ajax()) 
 
{ 
 
    $output=""; 
 
    $launchsitesatellite = DB::table('satellites') 
 
     ->orWhere('satname','LIKE','%'.$request->search.'%') 
 
     ->orWhere('norad_cat_id','LIKE','%'.$request->search.'%') 
 
    if ($launchsitesatellite) 
 
    { 
 
     foreach ($launchsitesatellite as $key => $launchsitesatellites) { 
 
     $output .='<tr>'. 
 
       '<td>'.$launchsitesatellites->satname.'</td>'. 
 
       '<td>'.$launchsitesatellites->norad_cat_id.'</td>'. 
 
       '<td>'.$launchsitesatellites->object_type.'</td>'. 
 
       '</tr>'; 
 
     } 
 
    } 
 

 
    return $output; 
 
} 
 
else { 
 
    $launchsitesatellite = DB::table('satellites')->where('site', $site_code)->get(); 
 

 
    return view('pages/launchsite-filter', compact('launchsites', 'launchsitesatellite'));   
 
} 
 
}

+0

哪裏的分號終止其中'$ launchsitesatellite'被定義(或者是一個複製粘貼錯誤)? –

+0

@ChrisForrence - 抱歉,忘記了其中的代碼。現在修復。 –

回答

2

讓我們來看看代碼,你在你的,如果塊有:

if ($request->ajax()) 
{ 
    $output=""; 
    $launchsitesatellite = DB::table('satellites') 
     ->orWhere('satname','LIKE','%'.$request->search.'%') 
     ->orWhere('norad_cat_id','LIKE','%'.$request->search.'%') 
    if ($launchsitesatellite) 
    { 
     foreach ($launchsitesatellite as $key => $launchsitesatellites) { 
     $output .='<tr>'. 
       '<td>'.$launchsitesatellites->satname.'</td>'. 
       '<td>'.$launchsitesatellites->norad_cat_id.'</td>'. 
       '<td>'.$launchsitesatellites->object_type.'</td>'. 
       '</tr>'; 
     } 
    } 

    return $output; 
} 

的錯誤你得到(提到here)是

Undefined property: Illuminate\Database\MySqlConnection::$satname 

當你定義$launchsitesatellite時,你正在將where子句添加到SQL語句中,但從未啓動它。

相反,這樣做:

$launchsitesatellite = DB::table('satellites') 
    ->orWhere('satname', 'LIKE', '%' . $request->search . '%') 
    ->orWhere('norad_cat_id', 'LIKE', '%' . $request->search . '%') 
    ->get(); 
2

你必須隔離or語句。試試這個:

$launchsitesatellite = DB::table('satellites') 
    ->where(function($q) use ($request) { 
     $q->orWhere('satname','LIKE','%'.$request->search.'%') 
      ->orWhere('norad_cat_id','LIKE','%'.$request->search.'%'); 
    }) 
    ->where('site', $site_code)->get(); 
+0

我認爲他的意思是'WHERE site =? AND(satname LIKE'%?%'或norad_cat_id ='%?%')'。 – Spingolini

+1

你是對的!我更新了答案。謝謝 – Laerte

+0

不幸的是沒有工作。我會發布我的完整控制器,也許可能會有衝突。 –