我正在Eloquent Query Builder中尝试左联接表,但该表有两个潜在外键。我只想联接一次,但如果潜在的其他列不为空,则它应该具有优先级。
DB::connection('...')->table('some_table')
->leftJoin('table_that_should_take_presedence as ttstp', 'ttstp.id', '=', 'some_table.ttstp_id')
->leftJoin('some_other_table', function ($otherTable) {
$otherTable->on('some_other_table.id', '=', 'ttstp.some_other_table_id');
//->.... if ttstp.some_other_table_id does not exist then
// some_table.some_other_table_id should be used
});
到目前为止,我的解决方案是两次连接表,并使用合并来启用该存在性:
DB::connection('...')->table('some_table')
->selectRaw('coalesce(sot.example, sot2.example, null) as example')
->leftJoin('table_that_should_take_presedence as ttstp', 'ttstp.id', '=', 'some_table.ttstp_id')
->leftJoin('some_other_table as sot', 'sot.id', '=', 'ttstp.some_other_table_id');
->leftJoin('some_other_table as sot2', 'sot2.id', '=', 'some_table.some_other_table_id');
这似乎并不圆滑,我觉得最佳的解决方案是加入一次。任何帮助感激。提前感谢。
1条答案
按热度按时间lb3vh1jj1#
据我所知,你想要这个: