PHP рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ

рд╣реИрдкреНрдкреА рд╕рд┐рджреНрдзрд╛рдВрдд рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛

рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:


рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдмреВрд▓рд┐рдпрди рд▓реЙрдЬрд┐рдХ рдСрдкрд░реЗрд╢рдВрд╕ рджреНрд╡рд╛рд░рд╛ рдЬреБрдбрд╝реА рд╡рд╕реНрддреБрдУрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдЖрдкрдХреЛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдФрд░ рджреЛрд╣рд░рд╛рд╡ рдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдХреА рдирдХрд▓ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рдЖрдЬ, рджреЛ рд╣реИрдВ (рдпрджрд┐ рдЖрдк рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВ) рд╕рдлрд▓ рдФрд░ рд▓реЛрдХрдкреНрд░рд┐рдп PHP рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдЬреЛ рдЖрдкрдХреЛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдбреЗрдЯрд╛ рд╕реЗрдЯреЛрдВ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдирд┐рдпрдореЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред рдпреЗ RulerZ рдФрд░ Happyr Doctrine Specification рд╣реИрдВ ред рджреЛрдиреЛрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдЕрдкрдиреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди рдХреЗ рд╕рд╛рде рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИрдВред рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рд╕реЗ рдПрдХ рд╕рдВрдкреВрд░реНрдг рд▓реЗрдЦ рддреИрдпрд╛рд░ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдбреЙрдХреНрдЯреНрд░рд┐рди рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди рдореЗрдВ рдирдИ рд░рд┐рд▓реАрдЬ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рд▓реЗрдХрд░ рдЖрдИ рд╣реИред


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╕рд┐рджреНрдзрд╛рдВрдд рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рдЬреЛ рд▓реЛрдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рд╡реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рд╕реЗрдХреНрд╢рди рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред


рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ, рдЖрдк рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд░рдЪрдирд╛ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рддрд░рд╣, рдЬрдЯрд┐рд▓ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдирд┐рдпрдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдореА рд░рдЪрдирд╛рдУрдВ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИрдВред Doctrine Specification рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП Doctrine Specification рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдбреЙрдХреНрдЯреНрд░рд┐рди рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди, рдбреЙрдХреНрдЯреНрд░рд┐рди рдУрдЖрд░рдПрдо рдХреНрд╡реЗрд░реАрдмрд░реНрд╕реНрдЯ рдФрд░ рдбреЙрдХреНрдЯреНрд░рд┐рди рдУрдЖрд░рдПрдо рдХреНрд╡реЗрд░реА рдкрд░ рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рд╕реНрддрд░ рд╣реИред


рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ:


$result = $em->getRepository(MyEntity::class)->match($spec); 

рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ, рд╡реНрдпрд░реНрде рд╣реИред
 $spec = ... $alias = 'e'; $qb = $em->getRepository(MyEntity::class)->createQueryBuilder($alias); $spec->modify($qb, $alias); $filter = (string) $spec->getFilter($qb, $alias); $qb->andWhere($filter); $result = $qb->getQuery()->execute(); 

рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ:


  • match - рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд░реВрдк рд╕рднреА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛;
  • matchSingleResult - Query::getSingleResult() рдмрд░рд╛рдмрд░ Query::getSingleResult() ;
  • matchOneOrNullResult - matchOneOrNullResult рдмрд░рд╛рдмрд░, рд▓реЗрдХрд┐рди null рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ;
  • getQuery - рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдПрдХ QueryBuilder рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╕реЗ рдПрдХ рдХреНрд╡реЗрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИред

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, getQueryBuilder рд╡рд┐рдзрд┐ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдПрдХ QueryBuilder рдмрдирд╛рддрд╛ рд╣реИ рдФрд░, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред


рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддреА рд╣реИ:



рддрд╛рд░реНрдХрд┐рдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ


andX рдФрд░ orX рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред


  • Spec::andX()
  • Spec::orX()
  • Spec::not()

рдпрд╣ Spec рдореБрдЦреМрдЯрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдерд╛рдЧрдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╡рд╕реНрддреБ рдХреЛ рддреБрд░рдВрдд рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ:


 new AndX(); new OrX(): new Not(); 

рдлрд╝рд┐рд▓реНрдЯрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛


рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рд╡рд┐рдирд┐рд░реНрджреЗрд╢, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЗ рдирд┐рдпрдо рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ WHERE рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрдирдореЗрдВ рддреБрд▓рдирд╛рддреНрдордХ рдСрдкрд░реЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:


  • isNull - SQL IS NULL рд╕рдорддреБрд▓реНрдп рд╣реИ
  • isNotNull - SQL рдкреВрд░реНрдг IS NOT NULL
  • in - IN () рдмрд░рд╛рдмрд░
  • notIn - NOT IN () рд╕рдорддреБрд▓реНрдп рдирд╣реАрдВ
  • eq - рд╕рдорд╛рдирддрд╛ рдкрд░реАрдХреНрд╖рдг =
  • neq - рдЕрд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ !=
  • lt - рд╕реЗ рдХрдо <
  • lte - <= рд╕реЗ рдХрдо рдпрд╛ рдмрд░рд╛рдмрд░
  • gt - рд╕реЗ рдЕрдзрд┐рдХ >
  • gte - рд╕реЗ рдмрдбрд╝рд╛ рдпрд╛ рдмрд░рд╛рдмрд░ >=
  • like - SQL LIKE рд╕рдордХрдХреНрд╖
  • InstOfX - DQL рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХреЗ рдмрд░рд╛рдмрд░

рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 $spec = Spec::andX( Spec::eq('ended', 0), Spec::orX( Spec::lt('endDate', new \DateTime()), Spec::andX( Spec::isNull('endDate'), Spec::lt('startDate', new \DateTime('-4 weeks')) ) ) ); 

рдХреНрд╡реЗрд░реА рд╕рдВрд╢реЛрдзрдХ


рдХреНрд╡реЗрд░реА рдореЙрдбрд┐рдлрд╛рдпрд░ рдХрд╛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдирд┐рдпрдореЛрдВ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд╡реЗ рдХреЗрд╡рд▓ QueryBuilder рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдВрд╢реЛрдзрдХ рдХрд╛ рдирд╛рдо рдФрд░ рдЙрджреНрджреЗрд╢реНрдп QueryBuilder рдореЗрдВ рд╕рдорд╛рди рддрд░реАрдХреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред


  • join
  • leftJoin
  • innerJoin
  • limit
  • offset
  • orderBy
  • groupBy
  • having

рдореИрдВ slice рд╕рдВрд╢реЛрдзрдХ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреА limit рдФрд░ offset рдХреЛ рдЬреЛрдбрд╝рддрд╛ limit рдФрд░ рд╕реНрд▓рд╛рдЗрд╕ рдХреЗ рдЖрдХрд╛рд░ рдФрд░ рдЗрд╕рдХреЗ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдСрдлрд╕реЗрдЯ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕рдВрд╢реЛрдзрди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓реЗрдЦрдХ рд╕реЗ рдЕрд╕рд╣рдордд рдереЗред рдПрдХ рд╕рдВрд╢реЛрдзрдХ рдмрдирд╛рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдкреГрд╖реНрдард╛рдВрдХрди рдХреЗ рджреМрд░рд╛рди рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рдХреНрд╖реНрдп рдХрд╛ рдкреАрдЫрд╛ рдХрд┐рдпрд╛ред рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ 1 рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рдкреГрд╖реНрда рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ 1 рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реНрд▓рд╛рдЗрд╕ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА рдореЗрдВ рдЙрд▓рдЯреА рдЧрд┐рдирддреА рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рд╣реА рдорд╛рдирд╛, рдЕрд░реНрдерд╛рддреН, 0. рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реНрд▓рд╛рдЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред 0 рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рдХреЗ рд░реВрдк рдореЗрдВред


рдкрд░рд┐рдгрд╛рдо рд╕рдВрд╢реЛрдзрдХ


рдкрд░рд┐рдгрд╛рдо рд╕рдВрд╢реЛрдзрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдореМрдЬреВрдж рд╣реИрдВред рд╡реЗ рдбреЙрдХреНрдЯреНрд░рд┐рди рдХреНрд╡реЗрд░реА рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдирд┐рдореНрди рд╕рдВрд╢реЛрдзрдХ рдбреЗрдЯрд╛ рдЬрд▓рдпреЛрдЬрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ ( Query::setHydrationMode() ):


  • asArray
  • asSingleScalar
  • asScalar

cache рд╕рдВрд╢реЛрдзрдХ рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдо рдХреЗ рдХреИрд╢рд┐рдВрдЧ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред


рд╣рдореЗрдВ рд╕рдВрд╢реЛрдзрдХ roundDateTimeParams рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдХреИрд╢рд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХреЗ рд╕рд╛рде рдХреБрдЫ рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпреЗ рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрд╡рд╕рд╛рдп рдирд┐рдпрдо рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╕рдордп рдПрдХ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИ, рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдХреИрд╢рд┐рдВрдЧ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред roundDateTimeParams рд╕рдВрд╢реЛрдзрдХ рдХреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ, рдЙрдирдореЗрдВ рддрд╛рд░реАрдЦ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдореВрд▓реНрдп рддрдХ рдиреАрдЪреЗ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рддрд╛рд░реАрдЦ рдорд╛рди рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рдореВрд▓реНрдп рдХреЗ рдЧреБрдгрдХ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рддрд╛рд░реАрдЦ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреАред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рд╣рдо 10 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХреЛ рдХреИрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо Spec::cache(600) рдФрд░ Spec::roundDateTimeParams(600) ред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЗрди рджреЛ рд╕рдВрд╢реЛрдзрдХ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ SRP рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред


рдПрдВрдмреЗрдбреЗрдб рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ


рд╣реИрдкреНрдкреА рдбреЙрдХреНрдЯреНрд░рд┐рди-рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди рдореЗрдВ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬреЛ рдПрдХ рдлрд┐рд▓реНрдЯрд░ рдФрд░ рдПрдХ рдЕрдиреБрд░реЛрдз рд╕рдВрд╢реЛрдзрдХ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред рдПрдХрдорд╛рддреНрд░ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡рд┐рдирд┐рд░реНрджреЗрд╢ countOf рдЬреЛ рдЖрдкрдХреЛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд░реВрдк рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрдкрдиреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдореВрд░реНрдд BaseSpecification рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдерд╛рдЧрдд рд╣реИред


рдирд╡рд╛рдЪрд╛рд░реЛрдВ


рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдирдП рддрд░реАрдХреЗ рдЬреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВ:


  • matchSingleScalarResult - Query::getSingleScalarResult() рдмрд░рд╛рдмрд░ Query::getSingleScalarResult() ;
  • matchScalarResult - Query::getScalarResult() рдмрд░рд╛рдмрд░ Query::getScalarResult() ;
  • iterate Query::iterate() рдХреЗ рд╕рдорддреБрд▓реНрдп рд╣реИ Query::iterate() ред

MemberOfX рд╡рд┐рдирд┐рд░реНрджреЗрд╢ MemberOfX - рдбреАрдИрдПрди рдХреЗ рд╕рдорддреБрд▓реНрдп MEMBER OF рдФрд░ indexBy рдХреНрд╡реЗрд░реА рд╕рдВрд╢реЛрдзрдХ рдХреЛ indexBy - QueryBuilder::indexBy() рдХреЗ рдмрд░рд╛рдмрд░ QueryBuilder::indexBy() ред


рдСрдкрд░реЗрдВрдб


рдирдИ рд░рд┐рд▓реАрдЬ рд╕реЗ рдСрдкрд░реЗрдВрдб рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рд╣реЛрддрд╛ рд╣реИ ред рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рд╕рднреА рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ рдСрдкрд░реЗрдВрдб рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдПрдХ рдСрдкрд░реЗрдЯрд░ рд╣реЛрддреА рд╣реИрдВред


 <left_operand> <operator> <right_operand> 

рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдмрд╛рдПрдВ рдСрдкрд░реЗрдВрдб рдХреЗрд╡рд▓ рдПрдХ рдЗрдХрд╛рдИ рдХреНрд╖реЗрддреНрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕рд╣реА рдСрдкрд░реЗрдВрдб рдХреЗрд╡рд▓ рдПрдХ рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рд░рд▓ рдФрд░ рдкреНрд░рднрд╛рд╡реА рддрдВрддреНрд░ рд╣реИ рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЙрд╕реА рд╕рдордп, рдпрд╣ рдХреБрдЫ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддрд╛ рд╣реИ:


  • рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде;
  • рдЦреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ;
  • рджреЛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ;
  • рджреЛ рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ;
  • рдЕрдВрдХрдЧрдгрд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде;
  • рдорд╛рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдСрдкрд░реИрдВрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рддрд░реНрдХреЛрдВ рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ DQL рдореЗрдВ рдЙрдирдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдСрдкрд░реЗрдВрдб рдХреЛ рд╕реНрд╡рдпрдВ рд╕реМрдВрдк рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХрдИ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдЦреЛрд▓рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд▓реНрдЯрд░ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред


рдХреНрд╖реЗрддреНрд░ рдФрд░ рдореВрд▓реНрдп


рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рдкрд╣рд▓рд╛ рддрд░реНрдХ рдПрдХ рдлрд╝реАрд▓реНрдб рдСрдкрд░реЗрдВрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдПрдХ рдСрдкрд░реЗрдВрдб рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЕрдВрддрд┐рдо рддрд░реНрдХ рдорд╛рди рдСрдкрд░реЗрдВрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред


 // DQL: e.day > :day Spec::gt('day', $day); // or Spec::gt(Spec::field('day'), $day); // or Spec::gt(Spec::field('day', $dqlAlias), $day); 

 // DQL: e.day > :day Spec::gt('day', $day); // or Spec::gt('day', Spec::value($day)); // or Spec::gt('day', Spec::value($day, Type::DATE)); 

рдЖрдк 2 рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 // DQL: e.price_current < e.price_old Spec::lt(Spec::field('price_current'), Spec::field('price_old')); 

рдЖрдк рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ 2 рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 // DQL: a.email = u.email Spec::eq(Spec::field('email', 'a'), Spec::field('email', 'u')); 

рдЕрдВрдХрдЧрдгрд┐рдд рд╕рдВрдЪрд╛рд▓рди


рдорд╛рдирдХ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рд╕рдорд░реНрдерди - , + , * , / , % ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрд┐рдВрджреБрдУрдВ рдХреА рдЧрдгрдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:


 // DQL: e.posts_count + e.likes_count > :user_score Spec::gt( Spec::add(Spec::field('posts_count'), Spec::field('likes_count')), $user_score ); 

рдЕрдВрдХрдЧрдгрд┐рдд рд╕рдВрдЪрд╛рд▓рди рдПрдХ рджреВрд╕рд░реЗ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:


 // DQL: ((e.price_old - e.price_current) / (e.price_current / 100)) > :discount Spec::gt( Spec::div( Spec::sub(Spec::field('price_old'), Spec::field('price_current')), Spec::div(Spec::field('price_current'), Spec::value(100)) ), Spec::value($discount) ); 

рдХрд╛рд░реНрдпреЛрдВ


рдирдИ рд░рд┐рд▓реАрдЬрд╝ рдиреЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдСрдкрд░реЗрдВрдб рдХреЛ рдЬреЛрдбрд╝рд╛ред рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдХреЗ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╛ Spec::fun() рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


 // DQL: size(e.products) > 2 Spec::gt(Spec::size('products'), 2); // or Spec::gt(Spec::fun('size', 'products'), 2); // or Spec::gt(Spec::fun('size', Spec::field('products')), 2); 

рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдореЗрдВ рдирд┐рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 // DQL: trim(lower(e.email)) = :email Spec::eq(Spec::trim(Spec::lower('email')), trim(strtolower($email))); // or Spec::eq( Spec::fun('trim', Spec::fun('lower', Spec::field('email'))), trim(strtolower($email)) ); 

рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдЕрд▓рдЧ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдХреЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 // DQL: DATE_DIFF(e.create_at, :date) Spec::DATE_DIFF('create_at', $date); // or Spec::DATE_DIFF(['create_at', $date]); // or Spec::fun('DATE_DIFF', 'create_at', $date); // or Spec::fun('DATE_DIFF', ['create_at', $date]); 

рдирдореВрдирд╛ рдкреНрд░рдмрдВрдзрди


рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рд░рд┐рдЯрд░реНрди рдорд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:


  • рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЗрдХрд╛рдИ рдЬреЛрдбрд╝реЗрдВ рддрд╛рдХрд┐ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рди рдмрдирд╛рдПрдВ;
  • рдкреВрд░реА рдЗрдХрд╛рдИ рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ;
  • рдЙрдкрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
  • рдЫрдВрдЯрд╛рдИ рдХреЗ рд▓рд┐рдП рд╢рд░реНрддреЛрдВ рдХреЗ рд╕рд╛рде рдЫрд┐рдкреЗ рд╣реБрдП рдЙрдкрдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдЗрд╕рдХреЗ рд▓рд┐рдП рдбреЙрдХреНрдЯреНрд░рд┐рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддреЗ рд╣реИрдВ )ред

рд╕рдВрд╕реНрдХрд░рдг 0.8.0 рд╕реЗ рдкрд╣рд▓реЗ, рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЗрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рд╕рдВрд╕реНрдХрд░рдг 0.8.0 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, рдЖрдк getQueryBuilder() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ QueryBuilder рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрдпрди рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдирдпрд╛ рд░рд┐рд▓реАрдЬрд╝ 1.0.0 select рдФрд░ addSelect рдЕрдиреБрд░реЛрдз addSelect рдЬреЛрдбрд╝рддрд╛ рд╣реИред select рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪрдпрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдореВрд▓реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдФрд░ addSelect рд╕реВрдЪреА рдореЗрдВ рдирдП рдорд╛рди рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдПрдХ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ Selection рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдпрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдк рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрди рдЕрд╡рд╕рд░реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реИрдВред


рдЖрдк рдПрдХ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 // DQL: SELECT e.email FROM ... Spec::select('email') // or Spec::select(Spec::field('email')) 

рдЖрдк рдЪрдпрди рдореЗрдВ рдПрдХ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:


 // DQL: SELECT e, u.email FROM ... Spec::addSelect(Spec::field('email', $dqlAlias)) 

рдЖрдк рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 // DQL: SELECT e.title, e.cover, u.name, u.avatar FROM ... Spec::andX( Spec::select('title', 'cover'), Spec::addSelect(Spec::field('name', $dqlAlias), Spec::field('avatar', $dqlAlias)) ) 

рдЖрдк рджрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдХрд╛рдИ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:


 // DQL: SELECT e, u FROM ... Spec::addSelect(Spec::selectEntity($dqlAlias)) 

рдЖрдк рдЪрдпрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 // DQL: SELECT e.name AS author FROM ... Spec::select(Spec::selectAs(Spec::field('name'), 'author')) 

рдЖрдк рдЪрдпрди рдореЗрдВ рдЫрд┐рдкреЗ рд╣реБрдП рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:


 // DQL: SELECT e, u.name AS HIDDEN author FROM ... Spec::addSelect(Spec::selectHiddenAs(Spec::field('email', $dqlAlias), 'author'))) 

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдЙрддреНрдкрд╛рдж рдкрд░ рдЫреВрдЯ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рднрд╛рд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 // DQL: SELECT (e.price_old is not null and e.price_current < e.price_old) AS discount FROM ... Spec::select(Spec::selectAs( Spec::andX( Spec::isNotNull('price_old'), Spec::lt(Spec::field('price_current'), Spec::field('price_old')) ), 'discount' )) 

рдЖрдк рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдЙрдкрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 // DQL: SELECT e.price_current AS price FROM ... WHERE price < :low_cost_limit Spec::andX( Spec::select(Spec::selectAs('price_current', 'price')), Spec::lt(Spec::alias('price'), $low_cost_limit) ) 

рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рднреА рд╣реИред рдпрд╣реАрдВ рд╕реЗ рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХрд╛ рдЕрдВрдд рд╣реЛрддрд╛ рд╣реИред рдирдИ рд░рд┐рд▓реАрдЬ рдиреЗ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд▓рд╛ рджреА рд╣реИрдВред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЖрдкрдХреА рд░реБрдЪрд┐ рдХреА рд╣реЛрдЧреАред


рдкреБрдирд╢реНрдЪ: рдореИрдВ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдпрд╛ рдкреАрдПрдо рдореЗрдВ рд▓рд┐рдЦреЗрдВред

Source: https://habr.com/ru/post/hi455030/


All Articles