Refactor Link

This commit is contained in:
Chris Tsang 2021-09-15 12:16:56 +08:00
parent fbd390662b
commit 8a4996300f
3 changed files with 22 additions and 16 deletions

20
src/entity/link.rs Normal file
View File

@ -0,0 +1,20 @@
use crate::{EntityTrait, RelationDef, QuerySelect, Select};
use sea_query::{JoinType};
pub type LinkDef = RelationDef;
pub trait Linked {
type FromEntity: EntityTrait;
type ToEntity: EntityTrait;
fn link(&self) -> Vec<LinkDef>;
fn find_linked(&self) -> Select<Self::ToEntity> {
let mut select = Select::new();
for rel in self.link().into_iter().rev() {
select = select.join_rev(JoinType::InnerJoin, rel);
}
select
}
}

View File

@ -2,6 +2,7 @@ mod active_model;
mod base_entity;
mod column;
mod identity;
mod link;
mod model;
pub mod prelude;
mod primary_key;
@ -11,6 +12,7 @@ pub use active_model::*;
pub use base_entity::*;
pub use column::*;
pub use identity::*;
pub use link::*;
pub use model::*;
// pub use prelude::*;
pub use primary_key::*;

View File

@ -30,22 +30,6 @@ where
}
}
pub trait Linked {
type FromEntity: EntityTrait;
type ToEntity: EntityTrait;
fn link(&self) -> Vec<RelationDef>;
fn find_linked(&self) -> Select<Self::ToEntity> {
let mut select = Select::new();
for rel in self.link().into_iter().rev() {
select = select.join_rev(JoinType::InnerJoin, rel);
}
select
}
}
#[derive(Debug)]
pub struct RelationDef {
pub rel_type: RelationType,