【问题标题】:Laravel SQLSTATE[42S22]: Column not found: 1054Laravel SQLSTATE [42S22]:找不到列:1054
【发布时间】:2018-10-20 07:21:15
【问题描述】:

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

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'landmarks' in 'where clause' (SQL: select * fromlocationswhere exists (select * fromlandmarkswherelocations.id=landmarks.loc​​ation_idandlandmarksLIKE %%))

我的搜索功能在我的视图中包含一个文本框,我想在单击搜索后在其下方显示结果。但是,在我的 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'));
  }

我怀疑是我的“位置”输入为空的问题。我不确定如何处理。

【问题讨论】:

  • 是地标表吗?
  • 是的,它是一张桌子——我的目标是能够在文本框中输入位置名称,然后必须显示地标的结果。关系已设置。
  • 你必须在 where 中使用 column,而不是 table。

标签: php laravel


【解决方案1】:

试试这个。

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'));
  }

我假设“landmarks”是您的关系或方法名称,而您将“landmark”作为列名。

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

【讨论】:

    【解决方案2】:

    改用急切加载->with()

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-21
      • 2015-12-08
      • 2018-11-02
      • 2019-10-02
      • 2020-05-15
      • 2017-04-03
      • 2021-10-02
      相关资源
      最近更新 更多