【问题标题】:Laravel ORM Model Hierarchy?Laravel ORM 模型层次结构?
【发布时间】:2013-05-02 21:32:03
【问题描述】:

我想为一个模型创建一对多关系。

正是我想建立一个类别的层次结构。

为此,我有一个创建外键/列 category_id 的迁移脚本。

在数据库中这很容易。创建一个类别“汽车”。创建另一个类别“Audi”,其父 id 链接到“汽车”的 id。

但是当我像这样在 ORM 模型中创建一个函数时:

public function category() {
    return $this->belongs_to('Category');
}

然后我创建一个无限循环。

我做错了什么?也许这是不可能的?

感谢您的建议!

【问题讨论】:

  • 我不明白为什么会造成无限循环。也许在玩自动加载?我以这种方式完成了分层类别,没有太大问题。我还在同一个表/模型中建立了 has_many_and_belongs_to 关系,即:tag_tag。
  • 你能给我一个适合你的例子(迁移脚本+模型代码)吗?我对它很感兴趣! :)

标签: php orm laravel laravel-3


【解决方案1】:

现在我可以使用 ORM 功能了。这很好用,我的视图可以处理它!

public function children() {
    return $this->has_many('Category','category_id');
}

public function parent()
{
    return $this->belongs_to('Category','category_id');
}

【讨论】:

  • 不能调用方法parent
  • 对于较新版本的 Laravel,它应该是 hasManybelongsTo。但是感谢您的想法:)
【解决方案2】:

好的,我最终编写了一个 parent() 函数,它返回 where 子句的值:

public function parent()
{
    return Category::where('id', '=', $this->category_id)->first();
}

【讨论】:

    【解决方案3】:

    对于一对多,您需要 2 个表。

    表 1:类型

    表 2:车辆

    在表 1 中,您有 ID、姓名(1、汽车)

    在表 2 中,您有 ID、名称、类型(1、audi、FK 到 Types.ID)

    在 SQL 中,这看起来像:

    SELECT *
    FROM Vehicles
    WHERE type = 1
    

    不知道这是否有帮助:)

    【讨论】:

    • 好的,这是我目前已经知道的。是否有一种实现的 laravel 方式来在一张表上创建关系?
    • 您是否考虑过使用查询构建器和连接功能来创建您的关系?
    • 好的,我看过了。似乎是实现它的另一种好方法。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多