0

次のモデルを使用して、ユーザーが映画を視聴済みおよびお気に入りとしてマークできる映画データベースがあります。

#[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>,
}
4

1 に答える 1