laravel Eloquent 中的条件关系
Posted
技术标签:
【中文标题】laravel Eloquent 中的条件关系【英文标题】:Conditional Relationship in laravel Eloquent 【发布时间】:2014-11-15 09:15:15 【问题描述】:让我有 3 个名为 user
、admin
、post
的表
我的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 根据数据透视表字段条件获取多对多关系