我有问题。比方说,我有一张
表 personal_contacts[name, email, something_else]
和
表 organisation_contacts[title, email, something, smth_else]
。
两个表都包含email
列。
此外,我有一张
表 needed_contacts[belonging_id, belonging_type]
,
与其他两个有多态关系。
现在,我需要按关系的needed_contacts
字段订购email
。我计划使用连接而不是通过电子邮件字段进行排序,但如果我不重命名一个字段,我会收到错误:
Integrity constraint violation: Column 'email' in field list is ambiguous
甚至可以实现,我想做什么?任何帮助,指示或评论将不胜感激。
我的PHP代码是:
NeededContact::leftJoin('personal_contacts', function($join){
$join->on('personal_contacts.id', '=', 'needed_contacts.belonging_id')->where('needed_contacts.belonging_type', '=', 'PersonalContact');
})
->leftJoin('organisation_contacts', function($join){
$join->on('organisation_contacts.id', '=', 'needed_contacts.belonging_id')->where('needed_contacts.belonging_type', '=', 'OrganisationContact');
})
->orderBy('email', 'desc');
答案 0 :(得分:0)
该查询将产生包含两个电子邮件列的结果,每个相关表一个。您可以在订单语句中选择表格,如下所示:
->orderBy('personal_contacts.email', 'desc');
但是我想这不是您真正想要的。您可以将计算列添加到将两个电子邮件列合并为一个的选择中,然后按此新列排序:
->selectRaw("CONCAT(COALESCE(personal_contacts.email, ''), COALESCE(organisation_contacts.email, '')) AS concat_email")
->orderBy('concat_email', 'desc');