Angel
Search…
Relations
Relational modeling is one of the most commonly-used features of sql databases - after all, it is the namesake of the term "relational database."
Angel supports the following kinds of relations by means of annotations on fields:
    @hasOne (one-to-one)
    @hasMany (one-to-many)
    @belongsTo (one-to-one)
    @manyToMany (many-to-many)
By default, the keys for columns are inferred automatically. In the following case:
1
@orm
2
@serializable
3
abstract class _Wheel extends Model {
4
@belongsTo
5
Car get car;
6
}
Copied!
The local key defaults to car_id, and the foreign key defaults to id. You can manually override these:
1
@BelongsTo(localKey: 'carId', foreignKey: 'licenseNumber')
2
Car get car;
Copied!
The ORM computes relationships by performing JOINs, so that even complex relationships can be fetched using just one query, rather than multiple.

Many-to-many Relationships

A very common situation that occurs when using relational databases is where two tables may be bound to multiple copies of each other. For example, in a school database, each student could be registered to multiple classes, and each class could have multiple students taking it.
This is typically handled by creating a third table, which joins the two together. In the Angel ORM, this is relatively straightforward:
1
@orm
2
@serializable
3
abstract class _Class extends Model {
4
String get courseName;
5
6
@ManyToMany(_Enrollment)
7
List<_Student> get students;
8
}
9
10
@orm
11
@serializable
12
abstract class _Student extends Model {
13
String get name;
14
int get year;
15
16
@ManyToMany(_Enrollment)
17
List<_Class> get classes;
18
}
19
20
@orm
21
@serializable
22
abstract class _Enrollment {
23
@belongsTo
24
_Student get student;
25
26
@belongsTo
27
_Class get class_;
28
}
Copied!
Last modified 2yr ago