Laravel Eloquent 足球比赛日程中的多重关系
Laravel Eloquent multiple relationship in a football game schedule
我是 Laravel 和 Eloquent 的新手,我正在尝试制定足球比赛计划。
现在我有 4 tables(有一些示例条目):
团队(所有团队)
+---------+-----------+
| team_id | team_name |
+---------+-----------+
| 1 | Arsenal |
| 2 | Chelsea |
+---------+-----------+
比赛(所有比赛)
+----------------+------------------+
| competition_id | competition_name |
+----------------+------------------+
| 1 | Premier League |
+----------------+------------------+
schedule(比赛日程)
+----+----------------+----------+--------------+--------------+-----------+-----------+
| id | competition_id | matchday | home_team_id | away_team_id | home_goal | away_goal |
+----+----------------+----------+--------------+--------------+-----------+-----------+
| 1 | 1 | 1 | 1 | 2 | 3 | 2 |
| 2 | 1 | 2 | 2 | 1 | 0 | 3 |
+----+----------------+----------+--------------+--------------+-----------+-----------+
schedule_teams(在 competition_id 和 schedule_team_id 上将日程表 teamid 与团队 id 匹配)
+----+------------------+----------------+----------+
| id | schedule_team_id | competition_id | teams_id |
+----+------------------+----------------+----------+
| 1 | 1 | 1 | 1 |
| 2 | 2 | 1 | 2 |
+----+------------------+----------------+----------+
这是我目前的 类:
Schedule.php
public function competition()
{
return $this->belongsTo(Competition::class, 'competition_id', 'competition_id');
}
Competition.php
public function schedule()
{
return $this->hasMany(Schedule::class, 'competition_id', 'competition_id');
}
与
$id = \request('competition_id');
$schedule = Schedule::where('competition_id', $id)->with('competition')->get();
我从日程表中获取了带有家庭和离开 ID 的日程表。
现在的问题是,我怎样才能从 schedule_teams table 的团队 table 获得指定的主场和客场 ID,例如 home_team_id = 1:
home_team_id (=1) -> schedule_team_id (=1) 和 competition_id (=1) -> 球队(阿森纳)
我希望 collection 中的时间表和相关团队的数据输出到 blade。
有人可以帮助我改进足球数据库吗?
你应该利用 hasManyThrough
关系。
如果你创建说 Schedule\Team
,然后像下面这样。
public function schedule() {
$this->belongsTo(Schedule::class, 'schedule_id');
}
public function team() {
$this->belongsTo(Team::class, 'team_id');
}
现在在您的 Schedule
class 中,您可以拥有以下内容。
public function teams() {
$this->hasManyThrough(Team::class, Schedule\Team::class, 'schedule_id');
}
还应注意,您的日程安排团队中不需要 competition_id
。既然球队属于赛程,赛程属于赛程,那么就可以拿来了。
如果您还希望 Team
知道它的日程安排,您可以将其添加到 Team
。
public function schedules() {
return $this->hasManyThrough(Schedule::class, Schedule\Team::class);
}
你 Schedule\Team
class 本质上是一个枢轴 table 的美化表示,但将其作为模型,可以让你在未来扩展它。它还有助于保持一切整洁。
希望这是有道理的。
我是 Laravel 和 Eloquent 的新手,我正在尝试制定足球比赛计划。
现在我有 4 tables(有一些示例条目):
团队(所有团队)
+---------+-----------+
| team_id | team_name |
+---------+-----------+
| 1 | Arsenal |
| 2 | Chelsea |
+---------+-----------+
比赛(所有比赛)
+----------------+------------------+
| competition_id | competition_name |
+----------------+------------------+
| 1 | Premier League |
+----------------+------------------+
schedule(比赛日程)
+----+----------------+----------+--------------+--------------+-----------+-----------+
| id | competition_id | matchday | home_team_id | away_team_id | home_goal | away_goal |
+----+----------------+----------+--------------+--------------+-----------+-----------+
| 1 | 1 | 1 | 1 | 2 | 3 | 2 |
| 2 | 1 | 2 | 2 | 1 | 0 | 3 |
+----+----------------+----------+--------------+--------------+-----------+-----------+
schedule_teams(在 competition_id 和 schedule_team_id 上将日程表 teamid 与团队 id 匹配)
+----+------------------+----------------+----------+
| id | schedule_team_id | competition_id | teams_id |
+----+------------------+----------------+----------+
| 1 | 1 | 1 | 1 |
| 2 | 2 | 1 | 2 |
+----+------------------+----------------+----------+
这是我目前的 类:
Schedule.php
public function competition()
{
return $this->belongsTo(Competition::class, 'competition_id', 'competition_id');
}
Competition.php
public function schedule()
{
return $this->hasMany(Schedule::class, 'competition_id', 'competition_id');
}
与
$id = \request('competition_id');
$schedule = Schedule::where('competition_id', $id)->with('competition')->get();
我从日程表中获取了带有家庭和离开 ID 的日程表。
现在的问题是,我怎样才能从 schedule_teams table 的团队 table 获得指定的主场和客场 ID,例如 home_team_id = 1:
home_team_id (=1) -> schedule_team_id (=1) 和 competition_id (=1) -> 球队(阿森纳)
我希望 collection 中的时间表和相关团队的数据输出到 blade。
有人可以帮助我改进足球数据库吗?
你应该利用 hasManyThrough
关系。
如果你创建说 Schedule\Team
,然后像下面这样。
public function schedule() {
$this->belongsTo(Schedule::class, 'schedule_id');
}
public function team() {
$this->belongsTo(Team::class, 'team_id');
}
现在在您的 Schedule
class 中,您可以拥有以下内容。
public function teams() {
$this->hasManyThrough(Team::class, Schedule\Team::class, 'schedule_id');
}
还应注意,您的日程安排团队中不需要 competition_id
。既然球队属于赛程,赛程属于赛程,那么就可以拿来了。
如果您还希望 Team
知道它的日程安排,您可以将其添加到 Team
。
public function schedules() {
return $this->hasManyThrough(Schedule::class, Schedule\Team::class);
}
你 Schedule\Team
class 本质上是一个枢轴 table 的美化表示,但将其作为模型,可以让你在未来扩展它。它还有助于保持一切整洁。
希望这是有道理的。