我有一个类似这样的数据库模式:
Section
id
name
Subsection
id
name
section_id
Category
id
name
subsection_id
SubCategory
id
name
category_id
Product
id
name
subcategory_id
如您所见,每个表都有一个引用上一个表的外键。当我试图从当前产品中获取该部分或从一个部分获取所有产品时,问题就出现了。到目前为止,我已经尝试过这个:
Section::with('product')->find(1)->product;
但我明白了:
SQLSTATE [42S22]:找不到列:1054未知列 ' product.section_id'在' where子句' (SQL:选择* 来自
products
products
。section_id
in (1))
1 - 这让我觉得我需要在products表中设置section_id才能使其正常工作。它是否正确?
2 - Laravel ORM不应该自动从产品层到层,并获得结果吗?
3 - 有没有办法维护我当前的表结构,我的意思是,没有在表的外键中添加额外的字段?
感谢。
答案 0 :(得分:2)
首先,假设您在所有模型上设置了关系以访问其下方的关系。如果不是这种情况,则需要设置关系。
Section::with('subsection.category.subcategory.product')->get();
我从来没有尝试过如此极端的嵌套,但我相信这会有效。 Laravel Docs谈论急切加载并滚动查看嵌套示例。
另一个想到的项目是hasManyThrough关系。你不能为这个数字做这么多,但它可能是你想要研究的东西。
文档的简短摘要是从你的例子,Section,Subsection和Category中获取前三个,然后在section class中你会有这种关系。
public function category()
{
return $this->hasManyThrough('Category', 'SubSection');
}
laravel docs有更多信息。