CHANGELOG
This commit is contained in:
parent
fbb16c73fa
commit
dd261f2a2f
66
CHANGELOG.md
66
CHANGELOG.md
@ -51,6 +51,72 @@ impl MigratorTrait for Migrator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
* Added option to construct chained AND / OR join on condition https://github.com/SeaQL/sea-orm/pull/1433
|
||||||
|
```rs
|
||||||
|
use sea_orm::entity::prelude::*;
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)]
|
||||||
|
#[sea_orm(table_name = "cake")]
|
||||||
|
pub struct Model {
|
||||||
|
#[sea_orm(primary_key)]
|
||||||
|
pub id: i32,
|
||||||
|
#[sea_orm(column_name = "name", enum_name = "Name")]
|
||||||
|
pub name: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
|
||||||
|
pub enum Relation {
|
||||||
|
// By default, it's
|
||||||
|
// `JOIN `fruit` ON `cake`.`id` = `fruit`.`cake_id` AND `fruit`.`name` LIKE '%tropical%'`
|
||||||
|
#[sea_orm(
|
||||||
|
has_many = "super::fruit::Entity",
|
||||||
|
on_condition = r#"super::fruit::Column::Name.like("%tropical%")"#
|
||||||
|
)]
|
||||||
|
TropicalFruit,
|
||||||
|
// Or specify `condition_type = "any"` to override it,
|
||||||
|
// `JOIN `fruit` ON `cake`.`id` = `fruit`.`cake_id` OR `fruit`.`name` LIKE '%tropical%'`
|
||||||
|
#[sea_orm(
|
||||||
|
has_many = "super::fruit::Entity",
|
||||||
|
on_condition = r#"super::fruit::Column::Name.like("%tropical%")"#
|
||||||
|
condition_type = "any",
|
||||||
|
)]
|
||||||
|
OrTropicalFruit,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ActiveModelBehavior for ActiveModel {}
|
||||||
|
```
|
||||||
|
You can also override it in custom join.
|
||||||
|
```rs
|
||||||
|
assert_eq!(
|
||||||
|
cake::Entity::find()
|
||||||
|
.column_as(
|
||||||
|
Expr::col((Alias::new("cake_filling_alias"), cake_filling::Column::CakeId)),
|
||||||
|
"cake_filling_cake_id"
|
||||||
|
)
|
||||||
|
.join(JoinType::LeftJoin, cake::Relation::OrTropicalFruit.def())
|
||||||
|
.join_as_rev(
|
||||||
|
JoinType::LeftJoin,
|
||||||
|
cake_filling::Relation::Cake
|
||||||
|
.def()
|
||||||
|
// chained AND / OR join on condition
|
||||||
|
.condition_type(ConditionType::Any)
|
||||||
|
.on_condition(|left, _right| {
|
||||||
|
Expr::col((left, cake_filling::Column::CakeId))
|
||||||
|
.gt(10)
|
||||||
|
.into_condition()
|
||||||
|
}),
|
||||||
|
Alias::new("cake_filling_alias")
|
||||||
|
)
|
||||||
|
.build(DbBackend::MySql)
|
||||||
|
.to_string(),
|
||||||
|
[
|
||||||
|
"SELECT `cake`.`id`, `cake`.`name`, `cake_filling_alias`.`cake_id` AS `cake_filling_cake_id` FROM `cake`",
|
||||||
|
"LEFT JOIN `fruit` ON `cake`.`id` = `fruit`.`cake_id` OR `fruit`.`name` LIKE '%tropical%'",
|
||||||
|
"LEFT JOIN `cake_filling` AS `cake_filling_alias` ON `cake_filling_alias`.`cake_id` = `cake`.`id` OR `cake_filling_alias`.`cake_id` > 10",
|
||||||
|
]
|
||||||
|
.join(" ")
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
### Enhancements
|
### Enhancements
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user