From 9db0748c64844ac6d63b63aae691bd610125716d Mon Sep 17 00:00:00 2001 From: Billy Chan Date: Sat, 28 Aug 2021 20:20:34 +0800 Subject: [PATCH] Non-static link --- src/entity/model.rs | 4 ++-- src/entity/relation.rs | 6 +++--- src/query/join.rs | 4 ++-- src/tests_cfg/cake.rs | 2 +- tests/common/bakery_chain/baker.rs | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/entity/model.rs b/src/entity/model.rs index 2672d8cc..4774e1dc 100644 --- a/src/entity/model.rs +++ b/src/entity/model.rs @@ -17,11 +17,11 @@ pub trait ModelTrait: Clone + Debug { >::find_related().belongs_to(self) } - fn find_linked(&self, _: L) -> Select + fn find_linked(&self, l: L) -> Select where L: Linked, { - L::find_linked() + l.find_linked() } } diff --git a/src/entity/relation.rs b/src/entity/relation.rs index 441a0524..29378f2a 100644 --- a/src/entity/relation.rs +++ b/src/entity/relation.rs @@ -33,11 +33,11 @@ pub trait Linked { type ToEntity: EntityTrait; - fn link() -> Vec; + fn link(&self) -> Vec; - fn find_linked() -> Select { + fn find_linked(&self) -> Select { let mut select = Select::new(); - for rel in Self::link().into_iter().rev() { + for rel in self.link().into_iter().rev() { select = select.join_rev(JoinType::InnerJoin, rel); } select diff --git a/src/query/join.rs b/src/query/join.rs index be759e97..42bc993c 100644 --- a/src/query/join.rs +++ b/src/query/join.rs @@ -59,13 +59,13 @@ where } /// Left Join with a Linked Entity and select both Entity. - pub fn find_also_linked(self, _: L) -> SelectTwo + pub fn find_also_linked(self, l: L) -> SelectTwo where L: Linked, T: EntityTrait, { let mut slf = self; - for rel in L::link() { + for rel in l.link() { slf = slf.join(JoinType::LeftJoin, rel); } slf.select_also(T::default()) diff --git a/src/tests_cfg/cake.rs b/src/tests_cfg/cake.rs index 56ca8797..32cc22fd 100644 --- a/src/tests_cfg/cake.rs +++ b/src/tests_cfg/cake.rs @@ -80,7 +80,7 @@ impl Linked for CakeToFilling { type ToEntity = super::filling::Entity; - fn link() -> Vec { + fn link(&self) -> Vec { vec![ super::cake_filling::Relation::Cake.def().rev(), super::cake_filling::Relation::Filling.def(), diff --git a/tests/common/bakery_chain/baker.rs b/tests/common/bakery_chain/baker.rs index 287e5deb..d3b01651 100644 --- a/tests/common/bakery_chain/baker.rs +++ b/tests/common/bakery_chain/baker.rs @@ -88,7 +88,7 @@ impl Linked for BakedForCustomer { type ToEntity = super::customer::Entity; - fn link() -> Vec { + fn link(&self) -> Vec { vec![ super::cakes_bakers::Relation::Baker.def().rev(), super::cakes_bakers::Relation::Cake.def(),