laravel中的递归外键[重复]

Posted

技术标签:

【中文标题】laravel中的递归外键[重复]【英文标题】:Recursive foreign key in laravel [duplicate] 【发布时间】:2019-08-13 08:36:11 【问题描述】:

我有带有列的表 tbl_relations

id,user_name,relation_name,relation_name_id 

relation_name_id 是在同一张表中引用 id 的外键。 在 laravel 中,我将从 id 中选择两个输入,并且需要从输入一个获取数据集合,直到使用外键递归方法到达第二个输入。这可能吗?

这样我需要得到收藏

【问题讨论】:

您必须使用 mysql 的 8 CTE 和递归查询,这是您使用此数据模型的最佳选择。 @RaymondNijland 请将其转换为 laravel ***.com/questions/16542013/… 【参考方案1】:

这个解决方案可能效率低下,但它会起作用:

class Relation extends Model 
     protected $table = 'tbl_relations';
     protected $with = [ 'related' ];

     public function related() 
          return $this->hasOne(Relation::class, 'relation_name_id'); 
     

每次加载 Relation 模型时,它都应该触发 related 关系的加载。

你可以这样做:

Relation::find(1)->related->related->id;

请注意,此解决方案未考虑特定的 MySQL 优化,因此可能是最慢的解决方案。

【讨论】:

非常感谢,但是“尝试获取非对象的‘相关’属性”得到这个错误兄弟 我认为这与方向有关。这个想法是Relation has 另一个关系意味着有一些关系,其中它的relation_name_id 是这个关系的id。在我的示例中,我使用 1 作为 ID,但根据您分享的内容可能无法正常工作,但 Realtion::find(2)->relation->id 可能会返回 1

以上是关于laravel中的递归外键[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.4 - 删除外键的唯一约束时出错[重复]

Laravel 8 de迁移过程中的外国错误[重复]

Laravel 4迁移问题中的外键

Laravel-7 迁移中的外键约束形成错误

Laravel 8 - 用户表中的两个外键

Laravel“外键约束失败”