首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >建立这种拉拉维尔关系的正确方式?

问建立这种拉拉维尔关系的正确方式?
EN

Stack Overflow用户
提问于 2020-01-27 15:55:47
回答 3查看 152关注 0票数 0

我在寻求一些逻辑上的建议。我正在创建一个系统,用户登录并在活动中注册他们的参与。他们可以多次参加一项活动。做这件事最好的方法是什么?我想确保我可以用雄辩的这一点,而不是创造我自己的职能。

我在想象..。

用户:

代码语言:javascript
复制
id

活动:

代码语言:javascript
复制
id
name

参加者:

代码语言:javascript
复制
id
user_id
activity_id
time_at_activity

我希望以后能够做这样的事情,例如:$user->participations->where('activity_id', 3)。

什么是最好的方法来设置这个?我想..。

用户:hasMany->参与度

活动:归属->参与

参与: hasMany->Activitys &归属->用户

这个看起来对吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-27 16:11:36

​

用户模式可以通过一个称为参与式的枢轴表与活动相关联:

代码语言:javascript
复制
/**
 * Indicate that the model belongs to a user.
 *
 * @see \App\Model\User
 *
 * @return BelongsTo
 */
public function user()
{
    return $this->belongsTo(User::class);
}

/**
 * Indicate that the model belongs to many activity participations.
 *
 * @see \App\Model\Activity
 *
 * @return BelongsTo
 */
public function participations()
{
    return $this->belongsToMany(Activity::class, 'participations');
}

$user->participations()->attach($activity);

您可能想要添加互惠关系。可以将它们分离为代码重用的特性。->attach(['participated_at' => now()])

票数 2
EN

Stack Overflow用户

发布于 2020-01-27 15:59:37

您可以使用多对多关系。

使用Participation作为您的枢轴表。将关系定义为

代码语言:javascript
复制
/* in User */
public function activity()
{
    return $this->belongsToMany('App\Models\Activitys','participation','user_id','activity_id')->as('participation')->withPivot('time_at_activity');
} 

/* in Activity */
public function user()
{
    return $this->belongsToMany('App\Models\Users','participation','activity_id','user_id')->as('participation')->withPivot('time_at_activity');
} 
票数 1
EN

Stack Overflow用户

发布于 2020-01-27 16:21:21

DB模式

​

代码语言:javascript
复制
// App\User
public function participations()
{
    return $this->hasMany('App\Participation');
} 
// You may create App\Participation Model
// App\Participation 
public function user()
{
    return $this->belongsTo('App\User');
} 

// Controller
$userParticipations = $user->participations->where('activity_id', 3);
// eager loading version
$userWithParticipations = $user->with(['participations' => function($q) { $q->where('activity_id', 3) }])->get();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59934609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档