php - Laravel 查询与连接表的关系
问题描述
我有一对一的关系。我的jobs
桌子连接到user_jobs
桌子。
我加入了这种关系,以获取与工作相关的用户数据。
这是我在Job模型中的关系:
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 子句(特别是获取的 name 列)。
这是我尝试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);
解决方案
在我看来,错误在于建立关系的形式。与 Eloquent 和 Query builder 的关系之间的区别
public function client(){
return $this->hasOne('App\ClientJob', 'client_id', 'id')->select('client_id', 'job_id', 'name');
}
推荐阅读
- excel - 计算具有多列的范围的平均值
- wordpress - 通过 URL 查询两个 Wordpress 类别
- authentication - 微服务认证/授权
- postgresql - postgres重新启动后是否可以自动运行查询?
- java - 如何在多个活动和我的回收器适配器中使用方法
- visual-studio-code - 学校可以免费下载 Visual Studio Code 吗?
- c++ - 如何在VSCode上设置数据断点(即观察点)
- leaflet - 从外部 GeoJSON 导入传单标记
- c# - 在 Windows 10 C# 中更改 PC 名称
- angular - ng test = 很多“验证它是这个模块的一部分”错误