首页 文章

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

提问于
浏览
0

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

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'landmarks' in 'where clause' (SQL: select * from locations where exists (select * from landmarks where locations . id = landmarks . location_id and landmarks 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

    请改为使用eager loading ->with()

    $locations = Location::with(['landmark' => function($query) use ($landmarks) {
         $query->where('_the_column_name_on_your_landmarks_table', 'LIKE', '%'
                       . $landmarks . '%');
    }])->get();
    
  • 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方法的第一个参数上,它应该是相关表格地标上存在的列名 .

相关问题