Laravel-запрос на связь с объединенной таблицей - PullRequest
0 голосов
/ 06 декабря 2018

У меня отношения один на один.Моя таблица 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?

EDIT

Это весь мой запрос:

$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 голосов
/ 06 декабря 2018

Мне кажется, что ошибка в форме, которая выстроила отношения.Разница между отношениями с Eloquent и Query Builder

public function client(){ return $this->hasOne('App\ClientJob', 'client_id', 'id')->select('client_id', 'job_id', 'name'); }

0 голосов
/ 06 декабря 2018

Я не могу комментировать, слишком мало очков репутации, поэтому пишите здесь.Возможно, включите отношение ClientJob в whereHas (), например,

orWhereHas('client.clientJob', function (...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...