Laravel 5 嵌套搜索查询
Posted
技术标签:
【中文标题】Laravel 5 嵌套搜索查询【英文标题】:Laravel 5 nested search query 【发布时间】: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 不太熟悉,但错误和代码表明您缺少与公司表的联接。 【参考方案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,你也应该探索一下。
【讨论】:
以上是关于Laravel 5 嵌套搜索查询的主要内容,如果未能解决你的问题,请参考以下文章