如何为模型设置多个作者类型
Posted
技术标签:
【中文标题】如何为模型设置多个作者类型【英文标题】:how to have multiple author type for model 【发布时间】:2018-11-24 16:29:08 【问题描述】:希望你能帮到大家。
我有一个名为services
的表,服务可以有一个作者,但可以是organization
或user
类型
这些是我的表:
1- 服务:
id author_id content
2- 作者:
id author_id author_type
3- 用户
id email username
4- 组织:
id about
如何将服务的组织或用户作为模型获取?
【问题讨论】:
您已经在模型中定义了哪些关系? @JonasStaudenmeir 除了service
上的user()
之外,它们不相关,我需要稍后用profile()
替换它,因为我找到了解决方案:***.com/questions/50865204/…,跨度>
【参考方案1】:
是的,这是可以实现的。您将简单地使用 Morph 关系
服务模式
/**
* @return \Illuminate\Database\Eloquent\Relations\MorphTo
*/
public function author()
return $this->morphTo('author');
您的 user.php 和 Organaztion.php 模型都需要具有以下内容:
/**
* @return \Illuminate\Database\Eloquent\Relations\MorphMany
*/
public function services()
return $this->morphMany('App\Services', 'author');
然后你可以像这样获取服务的作者:
// will return a user or organization object depending on the author_type
dd($service->author);
或者您可以为用户或组织获取服务
$user->services();
$organization->services();
多态关系:https://laravel.com/docs/5.6/eloquent-relationships#polymorphic-relations
【讨论】:
是的,我已经在测试这个方法了,我测试的很少,但这将是最后一个,看看效果如何【参考方案2】:要获取user
(并假设您需要将author
和user
表分开,尽管看起来合并它们可能是最好的),请在@987654326 之间创建一对一的关系@ 和user
以及author
和service
之间的一对多关系,然后使用动态属性访问user
模型。
作者.php
public function user()
return $this->hasOne('App\User');
public function services()
return $this->hasMany('App\Service');
用户.php
public function author()
return $this->belongsTo('App\Author');
Service.php
public function author()
return $this->belongsTo('App\Author');
然后您应该能够使用动态属性author
访问服务的用户,就像这样。
$myService->author->user
您需要在您的 user
表上定义一个 author_id
才能使其工作。
获取service
的organization
的工作方式类似。
如果您有其他问题,Laravel 文档的这一部分应该会有所帮助:https://laravel.com/docs/5.6/eloquent-relationships#one-to-one
注意:这将适用于您当前的表结构,但非常迂回和重复。您应该考虑合并您的 user
和 author
表以消除重复数据并简化您的模型关系。
【讨论】:
非常感谢您的帮助,但我不想访问author
模型,我希望通过“作者”访问“用户”模型,我能够加入他们但结果仍然是“App\Author”的实例,我知道很难得到想要的结果,但我希望有办法
非常感谢,我认为这可能对我有用:***.com/questions/43668153/…以上是关于如何为模型设置多个作者类型的主要内容,如果未能解决你的问题,请参考以下文章
如何为多个PHP-FPM容器构建单一的Nginx Docker镜像