为了账号安全,请及时绑定邮箱和手机立即绑定

建立这种拉拉维尔关系的正确方法?

建立这种拉拉维尔关系的正确方法?

PHP
斯蒂芬大帝 2022-08-19 15:50:13
我正在寻求一些逻辑建议。我正在创建一个系统,用户可以在其中登录并注册他们对活动的参与情况。他们可以多次参加一项活动。最好的方法是什么?我想确保我可以雄辩地使用它,而不是创建自己的函数。我正在想象...用户:id活动:id name参与:id user_id activity_id time_at_activity我希望以后能够做这样的事情:例如。$user->participations->where('activity_id', 3)设置它的最佳方法是什么?我想到了..用户: 有多种>参与活动: 属于>参与参与:具有许多>活动和属于>用户这看起来正确吗?
查看完整描述

3 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

//img1.sycdn.imooc.com//62ff40cc0001b6cc06480180.jpg

用户架构可以通过称为参与的数据透视表与活动相关联:


/**

 * 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()])


查看完整回答
反对 回复 2022-08-19
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

数据库架构

//img1.sycdn.imooc.com//62ff40e10001b24e06160443.jpg

// 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();



查看完整回答
反对 回复 2022-08-19
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

您可以使用多对多关系。


用作数据透视表。将关系定义为Participation


/* 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');


查看完整回答
反对 回复 2022-08-19
  • 3 回答
  • 0 关注
  • 93 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信