次のモデルを使用して、ユーザーが映画を視聴済みおよびお気に入りとしてマークできる映画データベースがあります。
#[derive(Serialize, Deserialize, Identifiable, Queryable, Associations)]
#[table_name = "movies"]
struct Movie {
id: 32
}
#[derive(Serialize, Deserialize, Identifiable, Queryable, Associations)]
#[table_name = "users"]
struct User {
id: 32
}
#[derive(Serialize, Deserialize, Identifiable, Queryable, Associations)]
#[table_name = "favorite_movies"]
struct FavoriteMovie {
movie_id: i32,
user_id: i32,
}
#[derive(Serialize, Deserialize, Identifiable, Queryable, Associations)]
#[table_name = "watched_movies"]
struct WatchedMovie {
movie_id: i32,
user_id: i32,
date: DateTime,
}
データベースに追加された最新の 100 の映画を一覧表示し、ユーザーがログインしている場合は各映画のユーザー データを含めたい場合、N+1 クエリの問題を回避するにはどうすればよいでしょうか?
オプションのユーザーデータも含むテーブルに別の構造体を追加できると考えていmovies
ますが、それを Diesel ORM と一緒に使用する方法がわかりません。
struct UserData {
favorite: bool,
watched: Option<DateTime>,
}
struct UserMovie {
id: i32,
user_data: Option<UserData>,
}