我希望你能帮助他们。
我有一个名为services
的表,一个服务可以有一个作者,但可以是organization
或user
类型
这些是我的表:
1-服务:
id author_id content
2-作者:
id author_id author_type
3-用户
id email username
4-组织:
id about
如何将组织或用户作为模型获得服务?
答案 0 :(得分:0)
要获取user
(并假设您需要将author
和user
表分开,尽管看起来合并它们可能是最好的),创建一个 - author
和user
之间的关系以及author
和service
之间的一对多关系,然后使用动态属性访问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
注意:这将适用于您当前的表结构,但非常圆和重复。您应该考虑合并user
和author
表来重复数据并简化模型关系。
答案 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