如何为模型创建多个作者类型

时间:2018-06-14 20:13:01

标签: laravel eloquent

我希望你能帮助他们。

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

1-服务:

id  author_id  content

2-作者:

id  author_id author_type

3-用户

id  email username

4-组织:

id  about

如何将组织或用户作为模型获得服务?

2 个答案:

答案 0 :(得分:0)

要获取user(并假设您需要将authoruser表分开,尽管看起来合并它们可能是最好的),创建一个 - authoruser之间的关系以及authorservice之间的一对多关系,然后使用动态属性访问user模型。

<强> Author.php

public function user()
{
    return $this->hasOne('App\User');
}

public function services()
{
    return $this->hasMany('App\Service');
}

<强> user.php的

public function author()
{
    return $this->belongsTo('App\Author');
}

<强> Service.php

public function author()
{
    return $this->belongsTo('App\Author');
}

然后,您应该能够使用动态属性author访问服务的用户,就像这样。

$myService->author->user

您需要在author_id表格中定义user才能生效。

获取organization service的工作方式类似。

如果您还有其他问题,请参阅Laravel文档的这一部分:https://laravel.com/docs/5.6/eloquent-relationships#one-to-one

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

答案 1 :(得分:0)

是的,这是可以实现的。您将简单地使用变形关系

服务模式

/**
 * @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