Я не могу преобразовать запрос Mysql в конструктор запросов laravel - PullRequest
0 голосов
/ 20 мая 2019

Я изо всех сил пытаюсь преобразовать этот ниже запрос MySQL в конструктор запросов laravel.Внутри много соединений и подзапросов.Может кто-нибудь, пожалуйста, помогите мне?

MYSQL-запрос:

SELECT  a.id , b.*, a.agent_id, td.contacts, td.addresses 
FROM teams a  
left join team_details as td on td.team_id = a.id
    LEFT OUTER JOIN
    (
        SELECT m.id, m.due_date, t.team_id, m.department, m.assigned_to , cm.title, u.name
        FROM (
            SELECT team_id, MAX(due_date) AS due_date
            FROM campaign_activities where task_status=false and due_date is not null
            GROUP BY team_id
            ) t JOIN campaign_activities m ON m.team_id = t.team_id AND t.due_date = m.due_date
            left join campaign_activity_masters cm on cm.id = m.camp_activity_id  
            left join users u on u.id = m.assigned_to 
    ) b ON a.id = b.team_id  
order by a.id

Я пытаюсь что-то вроде ниже, но застрял с LEFT OUTER JOIN, поскольку он имеет подзапрос внутри:).

DB::table('teams as a')
->leftjoin('team_details as td', 'td.team_id','=','a.id')
->select('a.id', 'b.*', 'a.agent_id','td.contacts','td.addresses')
->leftouterjoin(DB::select(DB::raw('SELECT m.id, m.due_date, t.team_id, m.department, m.assigned_to , cm.title, u.name
FROM (
    SELECT team_id, MAX(due_date) AS due_date
    FROM campaign_activities where task_status=false and due_date is not null
    GROUP BY team_id
    ) t JOIN campaign_activities m ON m.team_id = t.team_id AND t.due_date = m.due_date
    left join campaign_activity_masters cm on cm.id = m.camp_activity_id  
    left join users u on u.id = m.assigned_to')))
->get();

Есть предложения, пожалуйста?Я хочу применить функцию разбивки на страницы paginate() вместо get() для этого построителя запросов.

1 Ответ

0 голосов
/ 20 мая 2019

Я думаю, тебе стоит попробовать.

$cards = DB::select("SELECT  a.id , b.*, a.agent_id, td.contacts, td.addresses 
FROM teams a  
left join team_details as td on td.team_id = a.id
    LEFT OUTER JOIN
    (
        SELECT m.id, m.due_date, t.team_id, m.department, m.assigned_to , cm.title, u.name
        FROM (
            SELECT team_id, MAX(due_date) AS due_date
            FROM campaign_activities where task_status=false and due_date is not null
            GROUP BY team_id
            ) t JOIN campaign_activities m ON m.team_id = t.team_id AND t.due_date = m.due_date
            left join campaign_activity_masters cm on cm.id = m.camp_activity_id  
            left join users u on u.id = m.assigned_to 
    ) b ON a.id = b.team_id  
order by a.id");

Надеюсь, это поможет вам.

...