Select rows matching any of the enum values
Let say, we want to select any breakfast
serving everyday tea and breakfast tea.
#![allow(unused)] fn main() { use sea_orm::entity::prelude::*; // `Tea` enum #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)] #[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "tea")] pub enum Tea { #[sea_orm(string_value = "EverydayTea")] EverydayTea, #[sea_orm(string_value = "BreakfastTea")] BreakfastTea, #[sea_orm(string_value = "EarlGreyTea")] EarlGreyTea, } }
#![allow(unused)] fn main() { use sea_orm::entity::prelude::*; // `breakfast` entity #[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)] #[sea_orm(table_name = "breakfast")] pub struct Model { #[sea_orm(primary_key)] pub id: i32, pub bread: String, pub tea: Tea, } #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] pub enum Relation {} impl ActiveModelBehavior for ActiveModel {} }
We can perform the select as follows:
#![allow(unused)] fn main() { use sea_orm::sea_query::{BinOper, Expr}; // Filter `IS IN (EverydayTea, BreakfastTea)` let rows: Vec<breakfast::Model> = Entity::find() .filter( Expr::col(breakfast::Column::Tea) .binary(BinOper::In, Expr::tuple([ Tea::EverydayTea.as_enum(), Tea::BreakfastTea.as_enum(), ])) ) .all(db) .await? .unwrap(); // Or, inverse of it, filter `IS NOT IN (EarlGreyTea)` let rows: Vec<breakfast::Model> = Entity::find() .filter( Expr::col(breakfast::Column::Tea) .binary(BinOper::NotIn, Expr::tuple([Tea::EarlGreyTea.as_enum()])) ) .all(db) .await? .unwrap(); }