Laravel关系,其中外键是两列

时间:2017-11-22 10:10:32

标签: php laravel laravel-5 eloquent laravel-eloquent

我有一个应用程序,我在一个名为“games”的表中有一些数据,看起来像这样:

# games
+----+---------+--------+--------+
| id | name    | dataId | parent |
+----+---------+--------+--------+
| 1  | Team1   | 444    | null   |
+----+---------+--------+--------+
| 2  | Team2   | 445    | null   |
+----+---------+--------+--------+
| 3  | Team1.1 | 445    | 1      |
+----+---------+--------+--------+
| 4  | Team2.1 | 445    | 2      |
+----+---------+--------+--------+
| 5  | Team2.2 | 445    | 2      |
+----+---------+--------+--------+
| 6  | Team3   | 446    | null   |
+----+---------+--------+--------+
| 7  | Team4   | 447    | null   |
+----+---------+--------+--------+

正如您所看到的,记录可以有一个指向表中主记录的父记录。

我还有一个名为“fixtures”的表,这个表如下所示:

# fixtures
+----+--------+--------+-------+
| id | homeId | awayId | score |
+----+--------+--------+-------+
| 1  | 444    | 445    | 0     |
+----+--------+--------+-------+
| 2  | 445    | 446    | 0     |
+----+--------+--------+-------+
| 3  | 446    | 447    | 0     |
+----+--------+--------+-------+

所以我想做的是使用Eloquent加入两个表,如下所示:

// For Home:
WHERE fixtures.homeId = games.dataId AND games.parent = null

// And another for Away:
WHERE fixtures.awayId = games.dataId AND games.parent = null

我以为我可以使用OneToMany,但我只能指定一个外键。

Laravel有可能吗?如果是这样的话?

2 个答案:

答案 0 :(得分:1)

将此查询用于第一个查询并更改第二个查询的字段名称

class RatingForm(forms.Form):
    rate = forms.IntegerField(label='Noter', validators=[MaxValueValidator(5), MinValueValidator(0)])

答案 1 :(得分:0)

您可以尝试返回具有正确属性集的BelongsToMany实例。由于原始函数belongsToMany函数也返回此类的对象。

编辑:一些谷歌搜索给了我这个答案(How I can put composite keys in models in Laravel 5?),它有一个使用特征的答案。代码可以在github找到。