我正在做这个项目,因为我正在使用Laravel 8作为我的后端框架,我必须做一个自我加入,我已经尝试了这个代码,但它不工作-the first Join是一个我尝试但失败的-:
public function get_all_medical_centers(){
$data= DB:: table('medicalcenters')
->join('medicalcenters','medicalcenters.id',"=",'medicalcenters.parent_id')
->join('countries','medicalcenters.country_id',"=",'countries.id')
->join('states','medicalcenters.country_id',"=",'states.id')
->join('cities','medicalcenters.country_id',"=",'cities.id')
->select('medicalcenters.*', 'countries.name as country_name', 'states.name as state_name', 'cities.name as cities_name')
->get();
return $data;
}问题是,在数据库中,医疗中心表中有一些属性是其他属性的父属性,我希望在预览子属性时获得父属性的名称,以便同时预览其父属性的名称,而不仅仅是id。
表示图:

发布于 2021-04-13 22:58:34
如果您尝试自联接一个表,那么您必须为其中至少一个表提供别名,否则,如果您从这些表中选择任何列,SQL就无法知道您在引用什么。
要向联接的表中添加别名,可以执行以下操作:
DB::table('medicalcenters AS medc')
->join('medicalcenters AS self','medc.id',"=",'self.parent_id')但这是一个老生常谈的解决方案,对于Laravel中的普通关系数据,雄辩的模型会更好。
编辑为什么在自连接上需要别名:
如果你连接两个表,让我们说:users join posts on users.id = posts.user_id。您必须指定联接条件。这是users.id = posts.user_id。
让我们将其修改为自连接:users join users on users.id = users.user_id。在这里,条件并不清楚。此users.id或此users.user_id是原始表还是自联接表?目前还不清楚如何连接这两个表。所以我们必须给他们不同的名字,也就是别名。像这样的users as creators join users as subscribers on creators.id = subscribers.user_id。
https://stackoverflow.com/questions/66633630
复制相似问题