Skip to content

Commit c7bfb6d

Browse files
committed
[Blog] Edit
1 parent 98a516c commit c7bfb6d

File tree

1 file changed

+28
-8
lines changed

1 file changed

+28
-8
lines changed

Blog/blog/2025-11-11-sea-orm-2.0.md

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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")]
187187
pub 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
205208
let staff = staff::Entity::load()
206209
.with(staff::Relation::ReportsTo)
210+
.with(staff::Relation::Manages)
207211
.all(db)
208212
.await?;
209213

210214
assert_eq!(staff[0].name, "Alan");
211215
assert_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

213219
assert_eq!(staff[1].name, "Ben");
214220
assert_eq!(staff[1].reports_to.as_ref().unwrap().name, "Alan");
221+
assert!(staff[1].manages.is_empty());
215222

216223
assert_eq!(staff[2].name, "Alice");
217224
assert_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");
230242
assert_eq!(reports_to[0], None);
231243

232244
assert_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

235247
assert_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

239254
It can work in reverse too.
240255

241256
```rust
242257
let 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

250261
assert_eq!(staff[0].name, "Alan");
251262
assert_eq!(manages[0].len(), 2);
252263
assert_eq!(manages[0][0].name, "Ben");
253264
assert_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

Comments
 (0)