Skip to main content

LoaderTrait

Trait LoaderTrait 

Source
pub trait LoaderTrait {
    type Model: ModelTrait;

    // Required methods
    fn load_self<S, C>(
        &self,
        stmt: S,
        relation_enum: <<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Relation,
        db: &C,
    ) -> Result<Vec<Option<<<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model>>, DbErr>
       where C: ConnectionTrait,
             <<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model: Send,
             <<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Relation: Send,
             S: EntityOrSelect<<<Self as LoaderTrait>::Model as ModelTrait>::Entity>;
    fn load_self_many<S, C>(
        &self,
        stmt: S,
        relation_enum: <<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Relation,
        db: &C,
    ) -> Result<Vec<Vec<<<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model>>, DbErr>
       where C: ConnectionTrait,
             <<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model: Send,
             <<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Relation: Send,
             S: EntityOrSelect<<<Self as LoaderTrait>::Model as ModelTrait>::Entity>;
    fn load_self_via<V, C>(
        &self,
        via: V,
        db: &C,
    ) -> Result<Vec<Vec<<<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model>>, DbErr>
       where C: ConnectionTrait,
             V: EntityTrait,
             <<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model: Send,
             <<Self as LoaderTrait>::Model as ModelTrait>::Entity: RelatedSelfVia<V>;
    fn load_self_via_rev<V, C>(
        &self,
        via: V,
        db: &C,
    ) -> Result<Vec<Vec<<<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model>>, DbErr>
       where C: ConnectionTrait,
             V: EntityTrait,
             <<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model: Send,
             <<Self as LoaderTrait>::Model as ModelTrait>::Entity: RelatedSelfVia<V>;
    fn load_one<R, S, C>(
        &self,
        stmt: S,
        db: &C,
    ) -> Result<Vec<Option<R::Model>>, DbErr>
       where C: ConnectionTrait,
             R: EntityTrait,
             S: EntityOrSelect<R>,
             <Self::Model as ModelTrait>::Entity: Related<R>;
    fn load_many<R, S, C>(
        &self,
        stmt: S,
        db: &C,
    ) -> Result<Vec<Vec<R::Model>>, DbErr>
       where C: ConnectionTrait,
             R: EntityTrait,
             S: EntityOrSelect<R>,
             <Self::Model as ModelTrait>::Entity: Related<R>;
    fn load_many_to_many<R, S, V, C>(
        &self,
        stmt: S,
        via: V,
        db: &C,
    ) -> Result<Vec<Vec<R::Model>>, DbErr>
       where C: ConnectionTrait,
             R: EntityTrait,
             S: EntityOrSelect<R>,
             V: EntityTrait,
             V::Model: Send,
             <Self::Model as ModelTrait>::Entity: Related<R>;
}
Expand description

Batch-load related entities for a slice of parent models, avoiding the N+1 query problem.

Given a Vec<Parent>, load_one / load_many / load_many_to_many issue a single WHERE … IN (…) query for each relation hop and reassemble the results, grouped per parent.

Required Associated Types§

Source

type Model: ModelTrait

Source model

Required Methods§

Source

fn load_self<S, C>( &self, stmt: S, relation_enum: <<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Relation, db: &C, ) -> Result<Vec<Option<<<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model>>, DbErr>

Used to eager load self_ref relations

Source

fn load_self_many<S, C>( &self, stmt: S, relation_enum: <<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Relation, db: &C, ) -> Result<Vec<Vec<<<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model>>, DbErr>

Used to eager load self_ref relations in reverse, output is Vec<Model> instead of Option<Model> of load_self.

Source

fn load_self_via<V, C>( &self, via: V, db: &C, ) -> Result<Vec<Vec<<<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model>>, DbErr>

Used to eager load self_ref + via relations

Source

fn load_self_via_rev<V, C>( &self, via: V, db: &C, ) -> Result<Vec<Vec<<<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model>>, DbErr>

Used to eager load self_ref + via relations, but in reverse

Source

fn load_one<R, S, C>( &self, stmt: S, db: &C, ) -> Result<Vec<Option<R::Model>>, DbErr>

Used to eager load has_one relations

Source

fn load_many<R, S, C>( &self, stmt: S, db: &C, ) -> Result<Vec<Vec<R::Model>>, DbErr>

Used to eager load has_many relations

Source

fn load_many_to_many<R, S, V, C>( &self, stmt: S, via: V, db: &C, ) -> Result<Vec<Vec<R::Model>>, DbErr>

Used to eager load many_to_many relations. In SeaORM 2.0 load_many already support M-N relations so this method is not needed, only kept as legacy.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl<M> LoaderTrait for &[M]
where M: ModelTrait,

Source§

type Model = M

Source§

fn load_self<S, C>( &self, stmt: S, relation_enum: <<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Relation, db: &C, ) -> Result<Vec<Option<<<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model>>, DbErr>

Source§

fn load_self_many<S, C>( &self, stmt: S, relation_enum: <<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Relation, db: &C, ) -> Result<Vec<Vec<<<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model>>, DbErr>

Source§

fn load_self_via<V, C>( &self, _: V, db: &C, ) -> Result<Vec<Vec<<<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model>>, DbErr>

Source§

fn load_self_via_rev<V, C>( &self, _: V, db: &C, ) -> Result<Vec<Vec<<<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model>>, DbErr>

Source§

fn load_one<R, S, C>( &self, stmt: S, db: &C, ) -> Result<Vec<Option<R::Model>>, DbErr>

Source§

fn load_many<R, S, C>( &self, stmt: S, db: &C, ) -> Result<Vec<Vec<R::Model>>, DbErr>

Source§

fn load_many_to_many<R, S, V, C>( &self, stmt: S, via: V, db: &C, ) -> Result<Vec<Vec<R::Model>>, DbErr>

Source§

impl<M> LoaderTrait for Vec<M>
where M: ModelTrait,

Source§

type Model = M

Source§

fn load_self<S, C>( &self, stmt: S, relation_enum: <<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Relation, db: &C, ) -> Result<Vec<Option<<<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model>>, DbErr>

Source§

fn load_self_many<S, C>( &self, stmt: S, relation_enum: <<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Relation, db: &C, ) -> Result<Vec<Vec<<<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model>>, DbErr>

Source§

fn load_self_via<V, C>( &self, via: V, db: &C, ) -> Result<Vec<Vec<<<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model>>, DbErr>

Source§

fn load_self_via_rev<V, C>( &self, via: V, db: &C, ) -> Result<Vec<Vec<<<<Self as LoaderTrait>::Model as ModelTrait>::Entity as EntityTrait>::Model>>, DbErr>

Source§

fn load_one<R, S, C>( &self, stmt: S, db: &C, ) -> Result<Vec<Option<R::Model>>, DbErr>

Source§

fn load_many<R, S, C>( &self, stmt: S, db: &C, ) -> Result<Vec<Vec<R::Model>>, DbErr>

Source§

fn load_many_to_many<R, S, V, C>( &self, stmt: S, via: V, db: &C, ) -> Result<Vec<Vec<R::Model>>, DbErr>

Implementors§