我有一对一的关系。我的jobs
表已连接到user_jobs
表。
我已加入该关系,以获取与工作相关的用户数据。
这是我在工作模型中的关系:
public function client(){
return $this->hasOne('App\ClientJob')->leftJoin('clients', 'client_jobs.client_id', 'clients.id')
->select('clients.id', 'client_id', 'job_id', 'name');
}
这部分代码有效,我得到了客户数据。
但是我不能在该关系上添加where子句(特别是获取的名称列)。
这是我的代码尝试进入search users by their name
列的部分:
$jobs = Job::
when($request->input('keywords'), function($query) use ($request) {
return $query->where(function ($query) use ($request) {
$keywords = $request->input('keywords');
$query->where('title', 'like', '%'.$keywords.'%');
$query->orWhereHas('client', function ($query) use ($keywords){
$query->where('name', 'like', '%'.$keywords.'%');
});
$query->orWhereHas('category', function ($query) use ($keywords){
$query->where('name', 'like', '%'.$keywords.'%');
});
$query->orWhereHas('status', function ($query) use ($keywords){
$query->where('name', 'like', '%'.$keywords.'%');
});
});
})
此部分出现“找不到列” 错误。
$query->orWhereHas('client', function ($query) use ($keywords){
$query->where('name', 'like', '%'.$keywords.'%');
});
除了删除模型内部的联接并将其移到where子句上方的查询之外,其他人都知道如何启动并运行该查询?
编辑
这是我的整个查询:
$jobs = Job::
when($request->input('keywords'), function($query) use ($request) {
return $query->where(function ($query) use ($request) {
$keywords = $request->input('keywords');
$query->where('title', 'like', '%'.$keywords.'%');
$query->orWhereHas('client', function ($query) use ($keywords){
$query->where('name', 'like', '%'.$keywords.'%');
});
$query->orWhereHas('category', function ($query) use ($keywords){
$query->where('name', 'like', '%'.$keywords.'%');
});
$query->orWhereHas('status', function ($query) use ($keywords){
$query->where('name', 'like', '%'.$keywords.'%');
});
});
})
->with(['client','category' => function($query){
$query->select('id', 'name');
},'status' => function($query){
$query->select('id', 'name', 'color');
}])
->when($request->input('sort_by'), function($query) use ($request) {
if($request->sort_by == 'desc'){
$query->orderBy('created_at', 'desc');
}else{
$query->orderBy('created_at', 'asc');
}
})
->paginate(15);
答案 0 :(得分:0)
我无可奉告,声誉点太少,所以在这里写。 也许在其中的hasHas()中包含ClientJob关系
orWhereHas('client.clientJob', function (...
答案 1 :(得分:0)
在我看来,错误在于建立关系的形式。与之间的区别 雄辩的查询构建器
public function client(){
return $this->hasOne('App\ClientJob', 'client_id', 'id')->select('client_id', 'job_id', 'name');
}