微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel关系-多对一

如何解决Laravel关系-多对一

在索引页面上,我想显示最近的10个事件。每个活动都有4位参与者(称为用户)。

事件表示例:

id,name,user_one,user_two,user_three,user_four,event_start_time,more_event_data...

在控制器中,我正在向视图发送事件数据:


public function index()
{
    if( !AuthUserHasPermissionToRoute( 'event.index' ) )
        abort( 404 );
                
    return view( 'event.index' )
        ->with('event',Event::orderBy('id','DESC')->get() );
}

使用模型,我也想发送用户数据

在EventModel中,我尝试了hasMany(但只能使用1)

public function users()
{
    return $this->hasMany( User::class,'id','user_one','id' );
}

多对多:

public function users()
{
    return $this->belongsToMany( User::class );
}

在视图中,我试图显示用户名(以后可能会更多)

{{ $game->users->user_one->name }}
{{ $game->users->user_two->name }}
{{ $game->users->user_three->name }}
{{ $game->users->user_four->name }}

但是我无法使其正常工作,有人可以告诉我我在做什么错吗?

解决方法

如果事件表具有user_one,user_two,user_three,user_four个用户ID,则对于事件表,该关系应为belongsTo

事件模型

public function user_one()
{
    return $this->belongsTo( User::class,'user_one','id');
}
public function user_two()
{
    return $this->belongsTo( User::class,'user_two','id');
}
public function user_three()
{
    return $this->belongsTo( User::class,'user_three','id');
}
public function user_four()
{
    return $this->belongsTo( User::class,'user_four','id');
}

我建议创建一个与user_events不同的表,并与其建立belongsToMany关系

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。