Laravel красноречивый запрос при фильтрации - PullRequest
0 голосов
/ 08 июня 2018

Я сейчас работаю над этим запросом

select * 
  from incidents 
 where from_id in (SELECT id FROM users WHERE generalist = 579) 
    or user_id = 579 
 order 
    by(created_at)

Модель моего пользователя имеет id и столбец generalist.Модель моего Инцидента имеет id, user_id это идентификатор босса, а from_id это идентификатор сотрудника

Идея состоит в том, что generalist может видеть Инциденты, но они могут отсутствовать в user_id столбец, поэтому мне нужно получить всех пользователей, чей универсальный идентификатор совпадает с

Я пытаюсь сделать это на Eloquent и получаю в итоге // $ uid - это идентификатор пользователя

$query->whereIn('from_id',User::select('id')->where('generalist',$uid)->get())
            ->orWhere('user_id',$uid);

И я получаю то, что хочу, насколько я могу видеть, но позже у меня есть вход, чтобы я мог отфильтровать информацию // Передано в переменную $ search

$query->where(function($tq) use ($search){
                    $tq->whereHas('from',function($query2) use ($search){
                        $query2->where('firstname', 'like', "%$search%")
                              ->orWhere('lastname', 'like', "%$search%")
                              ->orWhere('number', 'like', "%$search%");
                    })
                    ->orWhere('status', 'like', "%$search%");
                });

И это «от»функция в модели

public function from() {
    return $this->hasOne('App\User','id','from_id');
}

Моя проблема в том, что фильтрация не работает, но когда этот $query->where('user_id', $uid); работает, фильтр работает отлично.

Я действительно не понимаю, почему не работает, и еслиВам нужно больше информации, пожалуйста скажите мне

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Извините, если я не объяснил себя хорошо, я решил это, добавив парентез с другим, где функция вне

          $query->where(function($tq) use ($uid){
                $tq->WhereHas('general',function ($query3) use ($uid){
                    $query3->where('generalist','=',$uid);
                })->orWhere('user_id', $uid);
            });
0 голосов
/ 08 июня 2018

FWIW, мне легче читать ...

SELECT i.* 
  FROM incidents i
  JOIN users u
    ON u.id = i.from_id
 WHERE u.generalist = 579 
    OR i.user_id = 579 
 ORDER 
    BY i.created_at;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...