【发布时间】:2017-04-28 16:20:56
【问题描述】:
我有以下 3 个已标准化的表:
`Table: TheMovies`
id | MovieName
---------------------
1 | Zootopia
2 | Moana
3 | Toy Story
`Table: TheGenres`
id | GenreName
---------------------
21 | Action
22 | Animation
23 | Adventure
`Table: mMoviesGenres`
movieID | genreID
---------------------
1 | 21
1 | 23
2 | 22
2 | 21
3 | 23
3 | 21
正如您在第三张表中看到的那样,一部电影有多种类型,而一种类型有多种电影。
我在 laravel 中创建了 TheMovies 和 TheGenres 模型。
我确保使用以下代码在模型内部建立关系:
class TheMovies extends Model
{
public function TheGenres() {
return $this->belongsToMany('App\TheGenres', 'mMoviesGenres', 'seriesID', 'genreID');
}
}
class TheGenres extends Model
{
public function TheGenres() {
return $this->belongsToMany('App\TheMovies', 'mMoviesGenres', 'genreID', 'seriesID');
}
}
我已经测试了所有内容,并且成功显示了特定电影的类型列表,并且还成功显示了特定类型的电影列表。
实际问题是我想根据流派显示特定电影的相关电影。
让我们以 TheMovies.id = 1 为例,它与 TheMovies.id = 3 类似,它们都是动作和冒险,如您在第三张表中所见。
我根据以下帖子找到了所需的查询: SQL Query based on other table.
SELECT m2.movieId
FROM mMoviesGenres m1
INNER JOIN mMoviesGenres m2
ON m1.genreID = m2.genreID
WHERE m1.movieId = 1 AND
m2.movieId <> 1
GROUP BY m2.movieId
HAVING COUNT(*) >= 2
但我不知道如何以 Eloquent 样式转换此查询,是的,我可以在 Eloquent 中进行原始查询,但我想利用创建的关系。
请给我一些建议。
【问题讨论】:
标签: php mysql laravel laravel-5