@@ -182,7 +182,7 @@ Let's say we have a `staff` table, where each staff has a manager that they repo
182182
183183```rust title = " staff.rs"
184184#[sea_orm :: model ]
185- #[derive (Clone , Debug , PartialEq , DeriveEntityModel , Eq )]
185+ #[derive (Clone , Debug , PartialEq , Eq , DeriveEntityModel )]
186186#[sea_orm (table_name = " staff" )]
187187pub struct Model {
188188 #[sea_orm(primary_key)]
@@ -192,10 +192,13 @@ pub struct Model {
192192 #[sea_orm(
193193 self_ref,
194194 relation_enum = " ReportsTo" ,
195+ relation_reverse = " Manages" ,
195196 from = " reports_to_id" ,
196197 to = " id"
197198 )]
198199 pub reports_to : HasOne <Entity >,
200+ #[sea_orm(self_ref, relation_enum = " Manages" , relation_reverse = " ReportsTo" )]
201+ pub manages : HasMany <Entity >,
199202}
200203```
201204
@@ -204,17 +207,26 @@ pub struct Model {
204207``` rust
205208let staff = staff :: Entity :: load ()
206209 . with (staff :: Relation :: ReportsTo )
210+ . with (staff :: Relation :: Manages )
207211 . all (db )
208212 . await ? ;
209213
210214assert_eq! (staff [0 ]. name, " Alan" );
211215assert_eq! (staff [0 ]. reports_to, None );
216+ assert_eq! (staff [0 ]. manages[0 ]. name, " Ben" );
217+ assert_eq! (staff [0 ]. manages[1 ]. name, " Alice" );
212218
213219assert_eq! (staff [1 ]. name, " Ben" );
214220assert_eq! (staff [1 ]. reports_to. as_ref (). unwrap (). name, " Alan" );
221+ assert! (staff [1 ]. manages. is_empty ());
215222
216223assert_eq! (staff [2 ]. name, " Alice" );
217224assert_eq! (staff [2 ]. reports_to. as_ref (). unwrap (). name, " Alan" );
225+ assert! (staff [2 ]. manages. is_empty ());
226+
227+ assert_eq! (staff [3 ]. name, " Elle" );
228+ assert_eq! (staff [3 ]. reports_to, None );
229+ assert! (staff [3 ]. manages. is_empty ());
218230```
219231
220232#### Model Loader
@@ -230,27 +242,35 @@ assert_eq!(staff[0].name, "Alan");
230242assert_eq! (reports_to [0 ], None );
231243
232244assert_eq! (staff [1 ]. name, " Ben" );
233- assert_eq! (reports_to [1 ]. unwrap (). name, " Alan" );
245+ assert_eq! (reports_to [1 ]. as_ref () . unwrap (). name, " Alan" );
234246
235247assert_eq! (staff [2 ]. name, " Alice" );
236- assert_eq! (reports_to [2 ]. unwrap (). name, " Alan" );
248+ assert_eq! (reports_to [2 ]. as_ref (). unwrap (). name, " Alan" );
249+
250+ assert_eq! (staff [3 ]. name, " Elle" );
251+ assert_eq! (reports_to [3 ], None );
237252```
238253
239254It can work in reverse too.
240255
241256``` rust
242257let manages = staff
243- . load_self_rev (
244- staff :: Entity :: find (). order_by_asc (staff :: COLUMN . id),
245- staff :: Relation :: ReportsTo ,
246- db ,
247- )
258+ . load_self_many (staff :: Entity , staff :: Relation :: Manages , db )
248259 . await ? ;
249260
250261assert_eq! (staff [0 ]. name, " Alan" );
251262assert_eq! (manages [0 ]. len (), 2 );
252263assert_eq! (manages [0 ][0 ]. name, " Ben" );
253264assert_eq! (manages [0 ][1 ]. name, " Alice" );
265+
266+ assert_eq! (staff [1 ]. name, " Ben" );
267+ assert_eq! (manages [1 ]. len (), 0 );
268+
269+ assert_eq! (staff [2 ]. name, " Alice" );
270+ assert_eq! (manages [2 ]. len (), 0 );
271+
272+ assert_eq! (staff [3 ]. name, " Elle" );
273+ assert_eq! (manages [3 ]. len (), 0 );
254274```
255275
256276### Unix Timestamp Column Type
0 commit comments