Объединить два запроса в один слот - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть два запроса:

Запрос 1

$usersdetails = DB::table('users as a')
    ->join('Appraiser_commands as b', 'a.id', '=', 'b.user_id')
    ->select('a.id as userid', 'b.cycle_id as cycleid', 'a.name as uname', 'b.mode as mode')
    ->where('a.head_id', '=', $id)
    ->where('b.mode', '=', 'proceed')
    ->get()->toArray();

Запрос 2

$usersdetailsApp = DB::table('users as a')
    ->join('Appraiser_commands as b', 'a.id', '=', 'b.user_id')
    ->select('a.id as userid', 'b.cycle_id as cycleid', 'a.name as uname', 'b.mode as mode')
    ->where('b.mode', '=', 'Approved')
    ->get()->toArray();

оба отдельных запроса работают хорошо .. Я пытаюсь объединить два запроса в один запрос, поэтому я попытался

$usersdetails = DB::table('users as a')
    ->join('Appraiser_commands as b', 'a.id', '=', 'b.user_id')
    ->select('a.id as userid', 'b.cycle_id as cycleid', 'a.name as uname', 'b.mode as mode')
    ->where('a.head_id', '=', $id)
    ->where('b.mode', '=', 'proceed')
    ->orWhere('b.mode', '=', 'Approved')
    ->get()->toArray();

Но это не работает. Я новичок в Laravel, пожалуйста, помогите.

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

попробуйте это

$usersdetails = DB::table('users as a')
    ->join('Appraiser_commands as b', 'a.id', '=', 'b.user_id')
    ->select('a.id as userid', 'b.cycle_id as cycleid', 'a.name as uname','b.mode as mode')
    ->where('a.head_id', '=', $id)
    ->where(function($query){
         $query->where('b.mode', '=', 'proceed');
         $query->orwhere('b.mode', '=', 'Approved');
     })
    ->get()->toArray();

с помощью where group вы можете создать and or группу запросов для лучшей группы результатов

0 голосов
/ 05 сентября 2018

Глядя на ваши запросы, у вас нет ->where('a.head_id', '=', $id) в Query 2.

Удалите это условие и добавьте head_id к выбору, чтобы вы могли вручную проверить, совпадает ли впоследствии head_id:

$usersdetails = DB::table('users as a')
    ->join('Appraiser_commands as b', 'a.id', '=', 'b.user_id')
    ->select('a.id as userid', 'b.cycle_id as cycleid', 'a.name as uname', 'b.mode as mode', 'a.head_id as headid')
    ->where('b.mode', 'proceed')
    ->orWhere('b.mode', 'Approved')
    ->get()->toArray();
0 голосов
/ 05 сентября 2018

попробуйте это:

$usersdetails = DB::table('users as a')
    ->join('Appraiser_commands as b', 'a.id', '=', 'b.user_id')
    ->select('a.id as userid', 'b.cycle_id as cycleid', 'a.name as uname', 'b.mode as mode')
    ->where(function ($query) use ($id) {
        $query->where('a.head_id', $id)->orWhereIn('b.mode',
            ['proceed', 'Approved']);
    })
    ->get()->toArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...