首先,不要将主键设为tid 和fid,而是将它们都保留为id。这不仅是最佳实践,而且可以让您更轻松地使用 Laravel 的 Eloquent ORM,因为它默认假定您的主键列名为 id。
第二件事,确保你的表名是复数形式。虽然这不是必需的,但我即将给出的示例是使用 Laravel 默认值,并且 Laravel 假设它们是复数形式。
无论如何,一旦您“Laravelized”了您的数据库,您就可以使用 Eloquent 模型以极少的工作量建立出色的关系。这就是我认为你想做的事情。
app/models/Team.php
class Team extends Eloquent {
// Yes, this can be empty. It just needs to be declared.
}
app/models/Fixture.php
class Fixture extends Eloquent {
public function homeTeam()
{
return $this->belongsTo('Team', 'home_team_id');
}
public function awayTeam()
{
return $this->belongsTo('Team', 'away_team_id');
}
}
在上面,我们创建了一个简单的模型 Team,Laravel 会自动在 teams 数据库表中查找它。
其次,我们创建了模型 Fixture,Laravel 将再次使用 fixtures 表。在这个模型中,我们指定了两个关系。 belongsTo 关系有两个参数,它与什么模型相关,在这两种情况下它们都是团队,以及列名称是什么。
Laravel 将自动获取 away_team_id 中的值,并在 teams 表中的 id 列中搜索它。
只需这么少的代码,您就可以做这样的事情。
$fixture = Fixture::find(1); // Retrieves the fixture with and id of 1.
$awayTeam = $fixture->awayTeam()->first(); // var_dump this to see what you get.
$homeTeam = $fixutre->homeTeam()->first();
然后您可以正常进行并访问表的列名。因此,假设您在团队表中有一个“名称”列。您可以像这样从夹具中呼出主队名称。
$fixture = Fixture::find(1); // Get the fixture.
echo $fixture->homeTeam->name;
现在快凌晨 2 点了,所以上面可能有一两个错误,但它应该可以工作。
请务必检查文档中的 Eloquent,尤其是与关系相关的部分。请记住按照 Laravel 想要的方式命名列和表。如果您不这样做,有一些方法可以指定您的自定义名称。
如果你想变得更花哨,你可以在你的团队模型上定义这样的反向关系。
app/models/Team.php
class Team extends Eloquent {
public function fixturesAtHome()
{
return $this->hasMany('Fixture', 'home_team_id');
}
public function fixturesAway()
{
return $this->hasMany('Fixture', 'away_team_id');
}
}
然后获取特定球队的所有主场赛程...
$team = Team::find(1); // Retreive team with id of 1;
$homeFixtures = $team->fixturesAtHome();