[英]left join with 2 columns
I want to join two tables with two columns, It's working in phpmyadmin. 我想加入两列两表,它在phpmyadmin中工作。 But it's not working with laravel. 但是它不适用于laravel。 So how to convert it in laravel structure. 那么如何将其转换为laravel结构。
SELECT
`j`.*,
`ts`.*,
`ps`.*,
`pn`.*,
`c`.*,
`planner`.*,
`ps`.`name` AS `section_name`,
`ps`.`id` AS `section_id`,
`planner`.`date` AS `planner_date`,
`pn`.`id` AS `planner_note_id`
FROM
`planner`
INNER JOIN
`timeslots` AS `ts` ON `ts`.`id` = `planner`.`timeslot_id`
INNER JOIN
`planner_sections` AS `ps` ON `ps`.`id` = `planner`.`planner_section_id`
LEFT JOIN
`planner_notes` AS `pn` ON `pn`.`date` = `planner`.`date` and `pn`.`contract_id` = `planner`.`contract_id`
INNER JOIN
`contracts` AS `c` ON `c`.`id` = `planner`.`contract_id`
INNER JOIN
`jobs` AS `j` ON `j`.`contract_id` = `c`.`id`
WHERE
`c`.`id` = 57
AND MONTH(`planner`.`date`) = 6
AND `planner`.`date` >= '2017-06-13'
AND `planner`.`deleted_at` IS NULL
ORDER BY `planner`.`date` ASC
But when i put it in laravel query structure it's not working. 但是,当我将其放在laravel查询结构中时,它不起作用。
$planner_list = Planner::join("timeslots as ts","ts.id","planner.timeslot_id")
->join("planner_sections as ps","ps.id","planner.planner_section_id")
->leftJoin("planner_notes as pn","pn.date","planner.date")
->leftJoin("planner_notes as pn","pn.contract_id","planner.contract_id")
->join("contracts as c","c.id","planner.contract_id")
->join("jobs as j","j.contract_id","c.id")
->where('c.id','=',$contract_id)
->where('planner.date','>=',$current_date)
->whereMonth('planner.date',$current_month)
->select(['j.*','ts.*','ps.*','pn.*','c.*','planner.*','ps.name as section_name','ps.id as section_id','planner.date as planner_date','pn.id as planner_note_id'])
->orderBy('planner.date','ASC')
->orderBy('planner.timeslot_id','ASC')
->orderBy('section_id','ASC')
->get();
Above conversation isn't working for me. 上面的对话对我不起作用。
It's also not working with , 也无法使用,
->leftJoin("planner_notes as pn","pn.date","planner.date","pn.contract_id","planner.contract_id")
Edit :- No I'm not getting any errors for it. 编辑:-不,我没有收到任何错误。 it just considering last On condition. 它只是考虑最后一个条件。
ON `pn`.`contract_id` = `planner`.`contract_id`
I have one more confusion that if I write two leftjoin then On condition can overwrite or not ? 我还有一个困惑,如果我写两个leftjoin,那么On条件是否可以覆盖?
EDIT-2 :- It only returns last on condition. EDIT-2:-它仅在条件上返回最后一个。 Query from query log is :- 从查询日志中查询是:
SELECT
`j`.*,
`ts`.*,
`ps`.*,
`pn`.*,
`c`.*,
`planner`.*,
`ps`.`name` AS `section_name`,
`ps`.`id` AS `section_id`,
`planner`.`date` AS `planner_date`,
`pn`.`id` AS `planner_note_id`
FROM
`planner`
INNER JOIN
`timeslots` AS `ts` ON `ts`.`id` = `planner`.`timeslot_id`
INNER JOIN
`planner_sections` AS `ps` ON `ps`.`id` = `planner`.`planner_section_id`
LEFT JOIN
`planner_notes` AS `pn` ON `pn`.`contract_id` = `planner`.`contract_id`
INNER JOIN
`contracts` AS `c` ON `c`.`id` = `planner`.`contract_id`
INNER JOIN
`jobs` AS `j` ON `j`.`contract_id` = `c`.`id`
WHERE
`c`.`id` = 57
AND MONTH(`planner`.`date`) = 6
AND `planner`.`date` >= '2017-06-13'
AND `planner`.`deleted_at` IS NULL
ORDER BY `planner`.`date` ASC
You could do 你可以做
->leftJoin('planner_notes as pn', function($join){
$join->on('pn.date', '=', 'planner.date');
$join->on('pn.contract_id','=','planner.contract_id');
})
or 要么
change alias of table as 将表的别名更改为
->leftJoin("planner_notes as pn","pn.date",'=',"planner.date")
->leftJoin("planner_notes as pnotes","pnotes.contract_id",'=',"planner.contract_id")
Laravel join with multiple condition Laravel加入多个条件
LEFT JOIN
`planner_notes` AS `pn` ON `pn`.`date` = `planner`.`date` and `pn`.`contract_id` = `planner`.`contract_id`
it's equivalent to: 它等效于:
->leftJoin('planner_notes as pn', function($join){
$join->on('pn.date', '=', 'planner.date');
$join->on('pn.contract_id','=','planner.contract_id');
})
laravel.com Ref: method_on laravel.com参考: method_on
Add an "on" clause to the join. 在连接中添加一个“ on”子句。
On clauses can be chained, eg On子句可以链接起来,例如
$join->on('contacts.userid', '=', 'users.id') ->on('contacts.infoid', '=', 'info.id') $ join-> on('contacts.userid','=','users.id')-> on('contacts.infoid','=','info.id')
will produce the following SQL: 将产生以下SQL:
on contacts.user_id = users.id and contacts.info_id = info.id 在contacts.user_id = users.id和contacts.info_id = info.id上
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.