如何为模型设置多个作者类型

Posted

技术标签:

【中文标题】如何为模型设置多个作者类型【英文标题】:how to have multiple author type for model 【发布时间】:2018-11-24 16:29:08 【问题描述】:

希望你能帮到大家。

我有一个名为services 的表,服务可以有一个作者,但可以是organizationuser 类型 这些是我的表:

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(并假设您需要将authoruser 表分开,尽管看起来合并它们可能是最好的),请在@987654326 之间创建一对一的关系@ 和user 以及authorservice 之间的一对多关系,然后使用动态属性访问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 才能使其工作。

获取serviceorganization 的工作方式类似。

如果您有其他问题,Laravel 文档的这一部分应该会有所帮助:https://laravel.com/docs/5.6/eloquent-relationships#one-to-one

注意:这将适用于您当前的表结构,但非常迂回和重复。您应该考虑合并您的 userauthor 表以消除重复数据并简化您的模型关系。

【讨论】:

非常感谢您的帮助,但我不想访问author 模型,我希望通过“作者”访问“用户”模型,我能够加入他们但结果仍然是“App\Author”的实例,我知道很难得到想要的结果,但我希望有办法 非常感谢,我认为这可能对我有用:***.com/questions/43668153/…

以上是关于如何为模型设置多个作者类型的主要内容,如果未能解决你的问题,请参考以下文章

如何为多个PHP-FPM容器构建单一的Nginx Docker镜像

如何扩展使用 AbstractBaseUser 创建的现有自定义用户模型以拥有多种用户类型,如客户、培训师和作者?

多个网站的多个 Alamofire 请求的正确模型

如何为多个用户存储信息

如何为自定义帖子类型创建档案

如何为多个泛型类型使用关键字`where`? [复制]