Struct HasManyThrough

Source
pub struct HasManyThrough<T>(/* private fields */);
Expand description

A “has many through” association.

Imagine you have these models:

struct User {
    id: i32,
}

struct Company {
    id: i32,
}

struct Employments {
    id: i32,
    user_id: i32,
    company_id: i32,
}

For this setup we say “user has many companies through employments”. This means uses can work at many companies and companies can have many employees, provided that we join with Employment.

This requires that we use the JoinModel type on EagerLoadChildrenOfType and is therefore a bit different from the other associations since it involves a third type.

§Example

You can find a complete example of HasManyThrough here.

§Attributes

NameDescriptionDefaultExample
model_fieldThe field on the contained type that holds the model{name of contained type} in snakecasemodel_field = company
join_modelThe model we have to join withN/Ajoin_model = models::Employment
child_primary_key_field_on_join_modelThe field on the join model that holds the primary key of the child model (Company in the example above){name of model}_idchild_primary_key_field_on_join_model = company_identifier
foreign_key_fieldThe field on the join model that holds the primary key of the parent model (User in the example above){name of model}_idforeign_key_field = user_identifier
child_primary_key_fieldThe field on the child model that holds its primary keyidforeign_key_field = identifier
graphql_fieldThe name of this field in your GraphQL schema{name of field}graphql_field = country
predicate_methodMethod used to filter child associations. This can be used if you only want to include a subset of the models. This method will be called to filter the join models.N/A (attribute is optional)predicate_method = a_predicate_method

Additionally it also supports the attributes print, skip, and field_arguments. See the root model docs for more into on those.

§Errors

try_unwrap will never error. If the association wasn’t loaded or wasn’t found it will return Ok(vec![]).

Implementations§

Source§

impl<T> HasManyThrough<T>

Source

pub fn try_unwrap(&self) -> Result<&Vec<T>, Error>

Borrow the loaded values. If no values have been loaded it will return an empty list. It will not return an error.

Trait Implementations§

Source§

impl<T> Association<T> for HasManyThrough<T>

Source§

fn loaded_child(&mut self, child: T)

Store the loaded child on the association.
Source§

fn assert_loaded_otherwise_failed(&mut self)

The association should have been loaded by now, if not store an error inside the association (if applicable for the particular association).
Source§

impl<T: Clone> Clone for HasManyThrough<T>

Source§

fn clone(&self) -> HasManyThrough<T>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug> Debug for HasManyThrough<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T> Default for HasManyThrough<T>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<T: Ord> Ord for HasManyThrough<T>

Source§

fn cmp(&self, other: &HasManyThrough<T>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl<T: PartialEq> PartialEq for HasManyThrough<T>

Source§

fn eq(&self, other: &HasManyThrough<T>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T: PartialOrd> PartialOrd for HasManyThrough<T>

Source§

fn partial_cmp(&self, other: &HasManyThrough<T>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl<T: Eq> Eq for HasManyThrough<T>

Source§

impl<T> StructuralPartialEq for HasManyThrough<T>

Auto Trait Implementations§

§

impl<T> Freeze for HasManyThrough<T>

§

impl<T> RefUnwindSafe for HasManyThrough<T>
where T: RefUnwindSafe,

§

impl<T> Send for HasManyThrough<T>
where T: Send,

§

impl<T> Sync for HasManyThrough<T>
where T: Sync,

§

impl<T> Unpin for HasManyThrough<T>
where T: Unpin,

§

impl<T> UnwindSafe for HasManyThrough<T>
where T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.