我是Laravel的新手(仅编码几个月)。我创建了一个连接两个表的数据库模型"玩家"和"团队"通过数据透视表。
class Player extends Model
{
public function teams()
{
# With timetsamps() will ensure the pivot table has its created_at/updated_at fields automatically maintained
return $this->belongsToMany('p4\Team')->withTimestamps();
}
}
class Team extends Model
{
public function players()
{
return $this->belongsToMany('p4\Player')->withTimestamps();
}
}
玩家可以是(很多)团队的成员,"拥有"团队,被招募"对团队而言,被拒绝"来自团队。团队和玩家都可以发起对这些状态的请求,允许另一方确认/拒绝。在每种情况下,它们应该相互关联,并且只能占据四种状态中的一种。链接这两个表的最佳方法是什么,以便任何两个实例之间的关系可以给出4"状态"?
我需要向用户(在这个开放式管理/招聘环境中控制团队和参与者)提供请求/批准每个"状态的分类的能力。
令我印象深刻的是,最干净的方法是使用一个支持"分配"这些给定状态到每个链接的ID对。然而,我只看到了这个概念被执行的简单例子,因此不确定最好的方法是什么。我会在这里感谢一些指导。
Schema::create('player_team', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
# `book_id` and `tag_id` will be foreign keys, so they have to be unsigned
# Note how the field names here correspond to the tables they will connect...
# `book_id` will reference the `books table` and `tag_id` will reference the `tags` table.
$table->integer('player_id')->unsigned();
$table->integer('team_id')->unsigned();
# Make foreign keys
$table->foreign('player_id')->references('id')->on('players');
$table->foreign('team_id')->references('id')->on('teams');
});
*再次,我很新鲜。抱歉,如果这有一个明显的解决方案我只是缺席了。
答案 0 :(得分:1)
如果我理解正确,您可以将status
列添加到数据透视表:
$table->tinyInteger('status')->unsigned();
不要忘记将withPivot()
添加到关系中:
return $this->belongsToMany('p4\Player')->withPivot('status')->withTimestamps();
您可以使用pivot
访问此列,并通过向attach()
和detach()
方法添加数组来设置或取消设置:
$team->players()->attach($playerId, ['status' => 3]);
在docs中阅读更多相关信息:
https://laravel.com/docs/5.3/eloquent-relationships#many-to-many https://laravel.com/docs/5.3/eloquent-relationships#inserting-and-updating-related-models