【问题标题】: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() 替换它,因为我找到了解决方案:stackoverflow.com/questions/50865204/…,跨度>

标签: laravel eloquent


【解决方案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”的实例,我知道很难得到想要的结果,但我希望有办法
  • 非常感谢,我认为这可能对我有用:stackoverflow.com/questions/43668153/…
猜你喜欢
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
相关资源
最近更新 更多