diff --git a/src/entity/relation.rs b/src/entity/relation.rs index 9b261fbe..1579b73a 100644 --- a/src/entity/relation.rs +++ b/src/entity/relation.rs @@ -25,7 +25,7 @@ where } fn find_related() -> Select { - Select::::new().join_rev(JoinType::InnerJoin, Self::to()) + Select::::new().join_join_rev(JoinType::InnerJoin, Self::to(), Self::via()) } } diff --git a/src/query/helper.rs b/src/query/helper.rs index eba227f3..afc07411 100644 --- a/src/query/helper.rs +++ b/src/query/helper.rs @@ -147,6 +147,15 @@ pub trait QueryHelper: Sized { self.join(join, rel) } + #[doc(hidden)] + fn join_join_rev(mut self, join: JoinType, rel: RelationDef, via: Option) -> Self { + self = self.join_rev(join, rel); + if let Some(via) = via { + self = self.join_rev(join, via) + } + self + } + /// Join via [`RelationDef`]. fn join(mut self, join: JoinType, rel: RelationDef) -> Self { self.query() diff --git a/src/query/join.rs b/src/query/join.rs index c9e975dc..24088a04 100644 --- a/src/query/join.rs +++ b/src/query/join.rs @@ -173,4 +173,20 @@ mod tests { .join(" ") ); } + + #[test] + fn join_7() { + use crate::{Related, Select}; + + let find_filling: Select = cake::Entity::find_related(); + assert_eq!( + find_filling.build(MysqlQueryBuilder).to_string(), + [ + "SELECT `filling`.`id`, `filling`.`name` FROM `filling`", + "INNER JOIN `cake_filling` ON `cake_filling`.`filling_id` = `filling`.`id`", + "INNER JOIN `cake` ON `cake`.`id` = `cake_filling`.`cake_id`", + ] + .join(" ") + ); + } }