在尝试从数据库中获取特定数据时,Laravel出现了问题。
在我能解释我的情况之前,这里有一些有关我的数据库结构示例的上下文。
表attribute
:ID,名称,...
表attribute_value
:id,值,attribute_id,parent_id,...
attribute_value.attribute_id
是对attribute.id
的引用。 attribute_value.parent_id
是对attribute_value.id
的引用。
对于每个attribute
,我需要获取其父项attribute
。这是一个SQL查询,可满足我的需求:
SELECT
attribute.id,
attribute.name,
attribute.custom_name,
parent_attribute.id,
parent_attribute.name,
parent_attribute.custom_name
FROM
attribute
LEFT JOIN attribute_value ON attribute_value.attribute_id = attribute.id
LEFT JOIN attribute_value as parent_attribute_value ON parent_attribute_value.id = attribute_value.parent_id
LEFT JOIN attribute as parent_attribute ON parent_attribute_value.attribute_id = parent_attribute.id
GROUP BY attribute.id
哪一种让我得到这种结果(最后两列来自父级的属性):
我的问题是要通过Laravel的Eloquent ORM来解决这个问题。我尝试使用原始选择:
DB::select(<<<EOT
SELECT
attribute.id,
attribute.name,
attribute.custom_name,
parent_attribute.id,
parent_attribute.name,
parent_attribute.custom_name
FROM
attribute
LEFT JOIN attribute_value ON attribute_value.attribute_id = attribute.id
LEFT JOIN attribute_value as parent_attribute_value ON parent_attribute_value.id = attribute_value.parent_id
LEFT JOIN attribute as parent_attribute ON parent_attribute_value.attribute_id = parent_attribute.id
GROUP BY attribute.id
EOT);
但是,这并不使我进入parent_attribute
的列。我还尝试在hasOneThrough
模型上创建attribute
关系,但是在尝试访问此字段时收到错误消息:
“ SQLSTATE [42000]:语法错误或访问冲突:1066不是唯一的表/别名:\'attribute'(SQL:选择`attribute_value`。*,`attribute`.`name`,`attribute`.custom_name `,`attribute..type`,`attribute`.is_custom`,`attribute`.is_activated`,IF(“ Direction” = attribute.name,1,0)AS is_hierarchical_organisation_attribute,`attribute`.`a_t_t_r_i_b_u_t_e_id`作为来自id属性=属性值上的attribute_value内连接attribute中的laravel_through_key的。id等于attribute_value值为null,其中“属性”。`deleted_at`为null并为“属性”。`a_t_t_t_r_i_b_u_t_e_id`= 3和`attribute_value`。`deleted_at`为null且属性为“ .is_activated` = 1)”
我真的不知道该怎么办,我很惊讶一个简单的原始查询无法正常工作。谁能帮助我实现这一目标?
谢谢:)