Laravel 4.2 ORM - 查询两者之间的各种表的关系

时间:2015-05-20 17:57:50

标签: php mysql laravel laravel-4

我有一个类似这样的数据库模式:

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 productssection_id in   (1))

1 - 这让我觉得我需要在products表中设置section_id才能使其正常工作。它是否正确?

2 - Laravel ORM不应该自动从产品层到层,并获得结果吗?

3 - 有没有办法维护我当前的表结构,我的意思是,没有在表的外键中添加额外的字段?

感谢。

1 个答案:

答案 0 :(得分:2)

  1. 不,这是一种方法,但这不是唯一的方法。
  2. 不,怎么会自动知道?
  3. 我相信如此,当laravel关系不适合你时,你总能创建一个特定的查询。
  4. 首先,假设您在所有模型上设置了关系以访问其下方的关系。如果不是这种情况,则需要设置关系。

    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有更多信息。