Laravel SQLSTATE [42S22]:未找到列:1054

时间:2018-05-10 05:03:34

标签: php laravel

您好我正在Laravel上构建一个简单的搜索功能,我收到错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'landmarks' in 'where clause' (SQL: select * from的位置where exists (select * from的地标where的位置. ID为=的地标. LOCATION_ID and的地标LIKE %%))

我的搜索功能在我的视图中包含一个文本框,我想在点击搜索后显示其下方的结果。但是,在我的SearchController中,我的索引函数中找到了以下代码:

public function index(Request $request){
    $landmarks = $request->input('location');
    //if($landmarks != ''){
      $locations = Location::whereHas('landmark', function($query) use ($landmarks) {
          $query->where('landmarks', 'LIKE', '%' . $landmarks . '%');
      })->get();
    //}

    return view('pages.search', compact('location'));
  }

我怀疑这是我的位置'输入为空。我不知道如何处理这个问题。

2 个答案:

答案 0 :(得分:0)

使用预先加载->with()代替

$locations = Location::with(['landmark' => function($query) use ($landmarks) {
     $query->where('_the_column_name_on_your_landmarks_table', 'LIKE', '%'
                   . $landmarks . '%');
}])->get();

答案 1 :(得分:0)

试试这个。

public function index(Request $request){
    $landmarks = $request->input('location');
    //if($landmarks != ''){
      $locations = Location::whereHas('landmarks', function($query) use ($landmarks) {
          $query->where('landmark', 'LIKE', '%' . $landmarks . '%');
      })->get();
    //}

    return view('pages.search', compact('location'));
  }

我假设"地标"是你的关系或方法名称,你有"具有里程碑意义的"作为列名。

whereHas方法的第一个参数应该是关系或方法名称,然后在where方法的第一个参数中,它应该是相关表格地标上存在的列名。