gpt4 book ai didi

laravel - Laravel 中的模型继承

转载 作者:行者123 更新时间:2023-12-03 01:45:13 25 4
gpt4 key购买 nike

我目前正在使用 Laravel,但我正在努力解决每个模型都需要从 Eloquent 扩展的事实,而且我不确定如何实现模型层次结构(使用不同的表)

例如:

假设我有一个抽象模型 Tool,然后是一个从 Tool 扩展而来的模型 Hammer 和一个模型 Screwdriver

现在,工具将扩展 Eloquent ...但是,没有工具表,有锤子表和 Screwdriver 表,因为它们具有不同的属性。

当锤子和 Screwdriver 都扩展工具时,如何指定它们有一个表?我如何使用 Eloquent 来调用 All Tools?

喜欢:

Tools::all()

这应该带来所有锤子和 Screwdriver ,因为它们都是工具

使用 Eloquent 可以实现这一点吗?

最佳答案

尽管我喜欢多态关系 (PR) 方法,比单表继承 ( STI ) 稍好一些,但它仍然感觉不像真正的继承方法。从领域(例如 UML 类图)的角度来看,这就像尝试使用组合关系而不是继承。

从数据库一致性的角度来看,多态关系本身在 Laravel 中已经是一个非常奇怪的解决方案(恕我直言)。由于不可能有一个字段是多个表的外键,因此这可能会导致连接不应连接的 ID。以及不遵守的逆关系。

虽然我实际上并没有描述问题的解决方案,但我会提出一种不同于 PR 和 STI 的方法。该解决方案类似于 Hibernate's table-per-subclass方法。我认为Dauce's extension to Eloquent正在朝着相同的方向发展,只是似乎仍然存在一些实现问题。

从数据库的角度来看,每个子类一个表也意味着父类(super class)每个直接子类包含一列。然后,您可以对(非空)id 施加外键约束并正确使用关系。然而,Laravel 神奇的 Eloquent 类中仍然应该有一些额外的逻辑,将请求的对象转换为正确的类型。

所以对我来说,从功能上来说,Eloquent 模型应该在 PHP 端正确继承,而数据库仍然可以使用外键约束。

关于laravel - Laravel 中的模型继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23973850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com