laravel Eloquent 中的条件关系

Posted

技术标签:

【中文标题】laravel Eloquent 中的条件关系【英文标题】:Conditional Relationship in laravel Eloquent 【发布时间】:2014-11-15 09:15:15 【问题描述】:

让我有 3 个名为 useradminpost 的表

我的post表结构是

-id
-poster_id
-poster_type //if value is 1 then poster_id will be releted with user table. if value is 2 then poster_id releted with admin table.

现在如何根据poster_type值写belongsTo与两个表的关系

我想在 Post 模型中这样做

public function Author()
     return $this->belongsTo('User', 'poster_id')->where('poster_type', '1') //poster_type is the field of post table.

【问题讨论】:

您可能应该重新考虑您的数据库设计,并为用户和管理员使用 users 表,并使用一个布尔列来确定用户是否是管理员。 管理员也是用户。因此,为所有其他用户的管理员和用户创建单独的表是没有意义的。您可以为每个用户组创建每个表,或者在用户表中将名为“组”或“类型”的列放置到不同的用户组。 其实这不是我的数据库。我只想了解如何根据值关联表格。例如:如果值为 1,那么我想与表 x 关联,如果值为 2,那么我想与表 y 关联。 您可以使用 laravel.com/docs/eloquent#polymorphic-relations 来实现这一点,只需将 poster_type 更改为 User / Admin 并确保您拥有这 2 个 Eloquent 模型。 ***.com/questions/43668153/… 请查看此链接以获取解决方案 【参考方案1】:

首先,您说的是由 eloquent 支持的多态关系。你应该看看文档。

http://laravel.com/docs/eloquent#polymorphic-relations

其次,您将 Eloquent 关系与特殊的数据恢复功能混合在一起,这是您应该避免的。我建议你将关系本身从数据恢复功能中分离出来。

另外,如果您想更进一步,请将关系保留在模型中,并将数据恢复功能拆分为存储库对象。

【讨论】:

以上是关于laravel Eloquent 中的条件关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent 根据数据透视表字段条件获取多对多关系

Laravel Eloquent—基本概念用法

在 laravel 中定义 eloquent 关系时添加额外的约束

laravel eloquent 中的一对多关系

Laravel 5中的反向多态关系

Laravel Eloquent 中的 Audit belongsTo 关系