MCPcopy Create free account
hub / github.com/SeaQL/sea-orm / loader_load_many_to_many

Function loader_load_many_to_many

tests/loader_tests.rs:144–209  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

142
143#[sea_orm_macros::test]
144async fn loader_load_many_to_many() -> Result<(), DbErr> {
145 let ctx = TestContext::new("loader_test_load_many_to_many").await;
146 create_tables(&ctx.db).await?;
147
148 let bakery_1 = insert_bakery(&ctx.db, "SeaSide Bakery").await?;
149
150 let baker_1 = insert_baker(&ctx.db, "Jane", bakery_1.id).await?;
151 let baker_2 = insert_baker(&ctx.db, "Peter", bakery_1.id).await?;
152 let baker_3 = insert_baker(&ctx.db, "Fred", bakery_1.id).await?; // does not make cake
153
154 let cake_1 = insert_cake(&ctx.db, "Cheesecake", None).await?;
155 let cake_2 = insert_cake(&ctx.db, "Coffee", None).await?;
156 let cake_3 = insert_cake(&ctx.db, "Chiffon", None).await?;
157 let cake_4 = insert_cake(&ctx.db, "Apple Pie", None).await?; // no one makes apple pie
158
159 insert_cake_baker(&ctx.db, baker_1.id, cake_1.id).await?;
160 insert_cake_baker(&ctx.db, baker_1.id, cake_2.id).await?;
161 insert_cake_baker(&ctx.db, baker_2.id, cake_2.id).await?;
162 insert_cake_baker(&ctx.db, baker_2.id, cake_3.id).await?;
163
164 let bakers = baker::Entity::find().all(&ctx.db).await?;
165 let cakes = bakers
166 .load_many_to_many(cake::Entity, cakes_bakers::Entity, &ctx.db)
167 .await?;
168
169 assert_eq!(bakers, [baker_1.clone(), baker_2.clone(), baker_3.clone()]);
170 assert_eq!(
171 cakes,
172 [
173 vec![cake_1.clone(), cake_2.clone()],
174 vec![cake_2.clone(), cake_3.clone()],
175 vec![]
176 ]
177 );
178
179 // same, but apply restrictions on cakes
180
181 let cakes = bakers
182 .load_many_to_many(
183 cake::Entity::find().filter(cake::Column::Name.like("Ch%")),
184 cakes_bakers::Entity,
185 &ctx.db,
186 )
187 .await?;
188 assert_eq!(cakes, [vec![cake_1.clone()], vec![cake_3.clone()], vec![]]);
189
190 // now, start again from cakes
191
192 let cakes = cake::Entity::find().all(&ctx.db).await?;
193 let bakers = cakes
194 .load_many_to_many(baker::Entity, cakes_bakers::Entity, &ctx.db)
195 .await?;
196
197 assert_eq!(cakes, [cake_1, cake_2, cake_3, cake_4]);
198 assert_eq!(
199 bakers,
200 [
201 vec![baker_1.clone()],

Callers

nothing calls this directly

Calls 10

insert_bakeryFunction · 0.85
insert_bakerFunction · 0.85
insert_cakeFunction · 0.85
insert_cake_bakerFunction · 0.85
load_many_to_manyMethod · 0.80
filterMethod · 0.80
likeMethod · 0.80
newFunction · 0.50
create_tablesFunction · 0.50
allMethod · 0.45

Tested by

no test coverage detected