Laravel запрос объединяет 1 таблицу в 2 таблицы за один запрос - PullRequest
0 голосов
/ 14 февраля 2020

У меня сложный запрос, и он работает, теперь мне нужно присоединиться к таблице users и получить 2 разных значения на основе 2 разных таблиц. Здесь все запутано.

Код

Я прокомментировал часть проблемы, а также данные, которые должны быть возвращены

$datas = DB::table('projects')
    ->orderBy('projects.id', 'desc')
    ->join('customers', 'projects.customer_id', '=', 'customers.id')
    ->leftjoin('project_schedules', 'projects.id', '=', 'project_schedules.project_id')
    ->leftjoin('project_schedule_details', 'project_schedules.id', '=', 'project_schedule_details.schedule_id')
    ->leftjoin('project_schedule_visits', 'projects.id', '=', 'project_schedule_visits.project_id')


    // issue tables (project_admins) and (project_shoppers)
    ->leftjoin('project_admins', 'projects.id', '=', 'project_admins.project_id')
    ->leftjoin('project_shoppers', 'projects.id', '=', 'project_shoppers.project_id')


    ->groupBy('projects.id')
    ->select(
        'projects.name as project',
        'customers.companyName as customer',
        'project_schedule_details.date as schedule_date',
        'project_schedule_details.description as schedule_description',
        'project_schedule_details.actual_cost as schedule_actual_cost',
        'project_schedule_visits.from_date as visit_from_date',
        'project_schedule_visits.to_date as visit_to_date',
        'project_schedule_visits.description as visit_description'
        // 'project_admins.user.username as admin'  //i.e. user 1
        // 'project_shoppers.user.username as shopper' // i.e user 2
    )
    ->get();

Объяснение:

Мне нужно присоединить таблицу users к project_admins table, а также project_shoppers table и вернуть связанных пользователей в эти таблицы.

Тогда я бы user 1 вернул на основе project_admins table And user 2 на основе project_shoppers table.

Есть идеи, как достичь этой цели?

1 Ответ

1 голос
/ 14 февраля 2020

Под leftJoins вы можете добавить дополнительные объединения для получения пользователей:

->leftJoin('users','users2.id','=','project_admins.user_id')
->leftJoin('users AS users2','users2.id','=','project_shoppers.user_id')

На ваш выбор вы можете получить детали, как это:

->select(
...,
'users.username AS admin',
'users2.username AS shopper'
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...