Laravel查询与联接表的关系

时间:2018-12-06 13:24:03

标签: php laravel laravel-5 relationship one-to-one

我有一对一的关系。我的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);

2 个答案:

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