Refactor Link
This commit is contained in:
parent
fbd390662b
commit
8a4996300f
20
src/entity/link.rs
Normal file
20
src/entity/link.rs
Normal 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
|
||||
}
|
||||
}
|
@ -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::*;
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user