![](/img/trans.png)
[英]Laravel/Eloquent: replace with() for leftjoin() or join()
[英]leftJoin not working properly in laravel eloquent?
我正在写一个查询,其中包含 laravel 中的 2 个表。 当只有父表中有数据时,我得到了正确的响应。 当我尝试在子表中添加数据时,我的查询结果没有给我正确的响应。
父表: CASES (caseId) <- 主键 子表: NOTICES (noticeId) <- 主键
案例中的虚拟数据:
caseId | caseName | caseNumber | customerId
1 | case1 | 1234 | 90
2 | case2 | 890 | 90
3 | case3 | 8900 | 90
通知中的虚拟数据:
noticeId | noticeName | noticeData | caseId | custId
1 | notice1 | {no:1;no1:2}| 1 | 90
当前 output:
{
caseId : 1,
caseName : case1,
caseNumber : 1234,
noticeId : 1,
noticeName : notice1,
noticeData : {no:1;no1:2},
},
{
caseId : 2,
caseName : case2,
caseNumber : 890,
noticeId : 1,
noticeName : notice1,
noticeData : {no:1;no1:2},
},
{
caseId : 3,
caseName : case3,
caseNumber : 8900,
noticeId : 1,
noticeName : notice1,
noticeData : {no:1;no1:2},
},
预期 Output:
{
caseId : 1,
caseName : case1,
caseNumber : 1234,
noticeId : 1,
noticeName : notice1,
noticeData : {no:1;no1:2},
},
{
caseId : 2,
caseName : case2,
caseNumber : 890,
noticeId : null,
noticeName : null,
noticeData : null,
},
{
caseId : 3,
caseName : case3,
caseNumber : 8900,
noticeId : null,
noticeName : null,
noticeData : null,
},
我的查询:
$data =DB::table('CASES')
->select('CASES.id','CASES.caseName','CASES.caseNumber','NOTICES.noticeName', 'NOTICES.noticeData')
->leftjoin('NOTICES', 'CASES.caseId', '=', 'NOTICES.caseId')
->leftjoin('NOTICES as NT', 'CASES.customerId', '=', 'NT.custId')
->get()->toArray();
要加入多个列,您可以使用高级联接:
$data = DB::table('CASES')
->select('CASES.id', 'CASES.caseName', 'CASES.caseNumber', 'NOTICES.noticeName', 'NOTICES.noticeData')
->leftjoin('NOTICES', function ($join) {
$join->on('CASES.caseId', '=', 'NOTICES.caseId')->on('CASES.customerId', '=', 'NOTICES.custId');
})->get()->toArray();
请注意,您可以在 join 子句中使用 'orOn' 而不是 'on',这取决于您想要的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.