多个"状态" Laravel数据模型中的多2个表关系?最好的方法?

时间:2016-11-30 18:52:48

标签: php laravel models

我是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');
});

*再次,我很新鲜。抱歉,如果这有一个明显的解决方案我只是缺席了。

1 个答案:

答案 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