我正在努力思考如何使用干净的方式在Laravel中建立三种模式之间的工作关系。
有大量匹配,其中包含 2个小组,其中每个小组都有 5个玩家。
注意:玩家不是用户,因此每场比赛都会产生新的球队和球员。
匹配
class Match extends Model
{
public function teams()
{
return $this->hasMany('App\Team');
}
}
小组
class Team extends Model
{
public function players()
{
return $this->hasMany('App\Player');
}
public function match()
{
return $this->belongsTo('App\Match');
}
}
球员
class Player extends Model
{
public function team()
{
return $this->belongsTo('App\Team');
}
}
我的问题是我在可爱的Laravel文档中找不到使用带有两个索引的数据库表的解决方案。
具体:匹配条目有赢家和更宽松的团队。如何以雄辩的方式告诉Laravel?
匹配
Schema::create('matches', function (Blueprint $table) {
$table->increments('id');
$table->integer('winner_team_id')->index();
$table->integer('looser_team_id')->index();
小组
Schema::create('teams', function (Blueprint $table) {
$table->increments('id');
$table->integer('player_1')->index();
$table->integer('player_2')->index();
$table->integer('player_3')->index();
$table->integer('player_4')->index();
$table->integer('player_5')->index();
球员
Schema::create('players', function (Blueprint $table) {
$table->increments('id');
这种方法是“不干净的”还是我错过了文档中显而易见的内容,例如模型的基于关系的类更多?
我是否需要为manyToMany-relationships-approach方法设置更多像“match_teams”和“team_players”这样的表?
答案 0 :(得分:0)
根据您的匹配架构,我可能会修改您的匹配关系,如下所示:
class Match extends Model
{
public function teamA()
{
return $this->hasOne('App\Team');
}
public function teamB()
{
return $this->hasOne('App\Team');
}
public function winningTeam()
{
return $this->hasOne('App\Team');
}
}
假设您的比赛总是包含两支球队。然后在你的架构中:
Schema::create('matches', function (Blueprint $table) {
$table->increments('id');
$table->integer('teama_id')->index();
$table->integer('teamb_id')->index();
$table->integer('winningteam_id')->index(); // Loser team is one of the ids from above ID, you would write a query scope to return the loser team.
$table->string('result');
}