我一直对 Larawel 中的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'));
}
}
让我们看一下 if 块中的代码:
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;
}
您收到的错误(此处提到(是
Undefined property: IlluminateDatabaseMySqlConnection::$satname
当你定义$launchsitesatellite
时,你会在SQL语句中添加where子句,但永远不要启动它。
相反,请执行此操作:
$launchsitesatellite = DB::table('satellites')
->orWhere('satname', 'LIKE', '%' . $request->search . '%')
->orWhere('norad_cat_id', 'LIKE', '%' . $request->search . '%')
->get();
您必须隔离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();