【问题标题】:Laravel 5 nested search queryLaravel 5 嵌套搜索查询
【发布时间】:2016-06-16 08:35:07
【问题描述】:

我正在尝试进行嵌套搜索查询,但出现此错误。我正在尝试搜索由 company_id 加入的公司名称。

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'company.name' in 'where clause' (SQL: select count(*) as aggregate from `position` where `to_date` >= 2016-06-16 and `company_id` = 123795854693734 and `title` like %searchquery% and `company`.`name` like %searchquery% and `location` like %%)

这是我的控制器功能

public function Search(){

    $keyword = Input::get('q');
    $location = Input::get('l');

    $data = Position::where('to_date', '>=', date('Y-m-d'))
    ->where('company_id', '=', $company_id)
    ->where('title', 'like', '%'.$keyword.'%')
    ->where('company.name', 'like', '%'.$keyword.'%')
    ->where('location', 'like', '%'.$location.'%')
    ->orderBy('from_date', 'desc')
    ->paginate(10);

    $data = array(
        'data' => $data,
    );

    return view('myview', $data);

}

该模型完美运行。但无论如何它都在这里。

namespace App;
use Illuminate\Database\Eloquent\Model;

class Position extends Model {
    protected $table = 'position';
    protected $guarded = array("id");
    protected $hidden = array();
    protected $appends = array('local_ad');

    protected $fillable = ['title', 'company_id', 'location'];

    public function company() {
        return $this->belongsTo('App\Company', 'company_id', 'id');
    }

}

【问题讨论】:

  • 对 Laravel 不太熟悉,但错误和代码表明您缺少与公司表的联接。

标签: php laravel model-view-controller orm laravel-5


【解决方案1】:

您实际上没有使用您的关系或加入公司表,这就是它找不到它的原因。

很简单,您可以使用whereHas 方法来过滤带有公司名称的职位。

$data = Position::whereHas('company', function ($q) use ($keyword) {
    $q->where('name', 'like', '%'.$keyword.'%');
})->where('to_date', '>=', date('Y-m-d'))
  ->where('company_id', '=', $company_id)
  ->where('title', 'like', '%'.$keyword.'%')
  ->where('location', 'like', '%'.$location.'%')
  ->orderBy('from_date', 'desc')
  ->paginate(10);

【讨论】:

    【解决方案2】:

    这个函数应该是

    public function Search(){
    
        $keyword = Input::get('q');
        $location = Input::get('l');
    
        $data = Position::where('to_date', '>=', date('Y-m-d'))
        ->where('company_id', '=', $company_id)
        ->where('title', 'like', '%'.$keyword.'%')
        ->with(['company' => function( $q ) use ($keyword) {
            ->where('name', 'like', '%'.$keyword.'%')
        }])
        ->where('location', 'like', '%'.$location.'%')
        ->orderBy('from_date', 'desc')
        ->paginate(10);
    
        $data = array(
            'data' => $data,
        );
    
        return view('myview', $data);
    }
    

    但这不做连接,这将获取位置,在 Eloquent 中有一个 whereHas,你也应该探索一下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 2015-09-24
      • 1970-01-01
      • 2021-12-19
      • 2015-06-29
      • 2017-06-11
      • 2020-01-23
      相关资源
      最近更新 更多