рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдкреГрд╖реНрдард╛рдВрдХрди - SQL_CALC_FOUND_ROWS (MySQL) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ

рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕


рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдЙрддреНрдкрд╛рджрди рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рдХрд╛рд░рдг, рдореИрдВ рдЕрджреНрднреБрдд рд╕рд┐рдореНрдлрдиреА 2 рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛, рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд▓реЛрдХрдкреНрд░рд┐рдп рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбреЙрдХреНрдЯреНрд░рд┐рди 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рджреЛ рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдУрдЖрд░рдПрдо (рдСрдмреНрдЬреЗрдХреНрдЯ рд░рд┐рд▓реЗрд╢рдирд▓ рдореИрдкрд░) рдФрд░ рдбреАрдмреАрдПрдПрд▓ (рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдмреНрд╕реНрдЯреНрд░рдХреНрд╢рди) рд▓реЗрдпрд░)ред рдУрдЖрд░рдПрдо рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд╕реНрддреБрдУрдВ рдХреА рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдбреАрдмреАрдПрдПрд▓, рдкреАрдбреАрдУ рдкреАрдПрдЪрдкреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд▓рд┐рдЦрдХрд░ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдПрдХ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рддрд░реАрдХрд╛ рд╣реИред рдУрдЖрд░рдПрдо рдЬрдЯрд┐рд▓ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдХрдИ рдлрд╛рдпрджреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рдпрд╣ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрдИ рдкреНрд░рддрд┐рдмрдВрдз рднреА рд▓рдЧрд╛рддрд╛ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╕реАрдзреЗ рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░рд╢реНрди рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рд╣реИ - рдУрдЖрд░рдПрдо рдбреЙрдХреНрдЯреНрд░рд┐рди рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА, рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдХреНрд╡реЗрд░реА рднрд╛рд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рд┐рдЪрд┐рдд SQL рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рд╣реИред рдореБрдЭреЗ рдЗрди рд╕реАрдорд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдФрд░ рдореИрдВ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХреИрд╕реЗ рдкрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ред рдпрд╣ рдЕрдиреБрд░реЛрдз рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдб рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛, рдпрджрд┐ рдЖрдк рдЗрд╕рдореЗрдВ рд╕реЗ рд▓рд┐рдорд┐рдЯ рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред

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


рд╕рдордп рдЖ рдЧрдпрд╛ рдЬрдм рдореИрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд╡реЗрд░реА рднрд╛рд╖рд╛ DQL (рдбреЙрдХреНрдЯреНрд░рд┐рди рдХреНрд╡реЗрд░реА рд▓реИрдВрдЧреНрд╡реЗрдЬ) рдХреА рд╕реАрдорд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ - рдореИрдВ MySQL рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЕрд░реНрдерд╛рддреН, рдХреНрд╡реЗрд░реА рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреИрд╕реЗ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ рдереА (рд▓рд┐рдорд┐рдЯ) рдпрд╣ рдлрд╝рдВрдХреНрд╢рди SQL_CALC_FOUND_ROWS рд╣реИред рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рд╣рдореЗрд╢рд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдЬрдм рдХреБрдЫ рд╕реВрдЪрдирд╛рдУрдВ рдХрд╛ рдкреГрд╖реНрдард╛рдВрдХрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд SELECT COUNT (*) рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд┐рдирд╛ LIMIT рдХреЗ, рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд░рд┐рдХреЙрд░реНрдб рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рдПрдЧреА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореБрдЭреЗ рдЕрдзрд┐рдХ рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд╡реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдбреЗрдЯрд╛рдмреЗрд╕ рднреА рдЕрдзрд┐рдХ рддреЗрдЬрд╝реА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ( рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░)ред рдмреЗрд╢рдХ, рдХреЛрдИ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рддрд░реНрдХ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдЖрд╡реЗрджрди рдХреЛ рдбреАрдмреАрдПрдордПрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрдИ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреЗрдЦреЗ рд╣реИрдВ рдЬреЛ рдбреАрдмреАрдПрдордПрд╕ рдХреЛ рджрд╕реНрддрд╛рдиреЗ рдХреА рддрд░рд╣ рдмрджрд▓ рджреЗрдВрдЧреЗ?
рджрд░рдЕрд╕рд▓, рдбреЙрдХреНрдЯреНрд░рд┐рди рдУрдЖрд░рдПрдо рдореЗрдВ рдкреЗрдЬрд┐рдиреЗрд╢рди рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдмрд░-рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓рд╛ рдбреЙрдХреНрдЯреНрд░рд┐рди рдерд╛, рдФрд░ рдореИрдВ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рд╕рдорд╛рдзрд╛рди рдирд┐рдХрд▓рд╛, рдпрд╣ рдореБрдЭреЗ рдХреБрдЫ рдирд╡реАрдирддрд╛рдУрдВ рдХреА рдмрджреМрд▓рдд рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд▓рдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЕрдкрдиреЗ рдкреВрд░реНрд╡рд╡рд░реНрддреА рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ: рдХреНрд╡реЗрд░реА рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдб рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ SQL_CALC_FOUND_ROWS рдХреАрд╡рд░реНрдб рдХреЛ рд╕реЗрд▓реЗрдХреНрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рдмрд╛рдж рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ MySQL рдХреЛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрддрд╛рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рд╕реАрдорд╛ рд╕реАрдорд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗред рдЖрд╡рд╢реНрдпрдХ рдЖрдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдПрдХ рдЕрдиреНрдп рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреА рд╣реЛрдЧреА: SELECT FOUND_ROWS (), рдЬреЛ рдкреЛрд╖рд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рджреВрд╕рд░реА рдХреНрд╡реЗрд░реА рдбреЗрдЯрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ MySQL рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЬрд╛рдирддрд╛ рд╣реИ рдЬрдм рдкрд╣рд▓реА рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЧрдИ рдереА, рдпрд╣рд╛рдВ рд╣рдо рд╕рд┐рд░реНрдл рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЬрдм рдПрдХ DQL рдкреНрд░рд╢реНрди рдХреЗ рдкрд╛рда рдореЗрдВ SQL_CALC_FOUND_ROWS рд╢рдмреНрдж рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ:

<?php
$query = $em->createQuery("SELECT SQL_CALC_FOUND_ROWS n FROM MyProject\Entity\News n WHERE n.date > '2011-01-01'");
$query->setMaxResults(10);
$news = $query->getResult();
...
?>

рдЙрддреНрдкрдиреНрди рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░рдХрд╛рд░:

SELECT SQL_CALC_FOUND_ROWS AS o__0 FROM News...

рдпрд╣ рдкреНрд░рд╢реНрди, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбреЙрдХреНрдЯреНрд░рд┐рди рдХреЛ рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рддрд╛рд▓рд┐рдХрд╛ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдирд╛рдо (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, рдЗрдХрд╛рдИ рд╡рд╕реНрддреБ рдХрд╛ рдХреНрд╖реЗрддреНрд░) рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред

рдирд┐рд░реНрдгрдп


рдбреЙрдХреНрдЯреНрд░рд┐рди 2 рдореЗрдВ рдПрдХ рдмрд┐рд▓реНрдЯ-рдЗрди рдХреНрд╡реЗрд░реА рдкрд╛рд░реНрд╕рд░ рд╣реИ, рдЬреЛ рдПрдХ DQL рдХреНрд╡реЗрд░реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд, рдПрдХ рдЯреНрд░реА рдмрдирд╛рддрд╛ рд╣реИ (Abstract Syntax Tree), рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, SQL рдХреНрд╡реЗрд░реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред SQL рдкреАрдврд╝реА рдХрд╕реНрдЯрдо рдПрдПрд╕рдЯреА рд╡реЙрдХрд░ рдирд╛рдордХ рдПрдХ рддрдВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ (рдореИрдВ рдЙрдиреНрд╣реЗрдВ "рдХреНрд░реЙрд▓рд░" рдХрд╣рддрд╛ рд╣реВрдВ)ред рдХреНрд░реЙрд▓рд░ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ: рдЖрдЙрдЯрдкреБрдЯ рд╡реЙрдХрд░ рдФрд░ рдЯреНрд░реА рд╡реЙрдХрд░ред рдЖрдЙрдЯрдкреБрдЯ рд╡реЙрдХрд░ (рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдХреНрд╡реЗрд░реА рдХреЗ рдПрд╕рдХреНрдпреВрдПрд▓ рдкрд╛рда рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдФрд░ рдЯреНрд░реА рд╡реЙрдХрд░ (рд╢рд╛рдпрдж рдХреЛрдИ рднреА рд╕рдВрдЦреНрдпрд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдПрд╕рдЯреА рдкреЗрдбрд╝ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдПрд╕рдХреНрдпреВрдПрд▓ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рд╡реЙрдХрд░ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ - рд╡реЙрдХрд╕реЗрд▓реЗрдХреНрдЯреЙрдЬ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдХреЗ рдорд╛рдирдХ SqlWalker рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛:

<?php

namespace MyProject\Entity\Walkers;

use Doctrine\ORM\Query\SqlWalker;

class MysqlPaginationWalker extends SqlWalker {

/**
* Walks down a SelectClause AST node, thereby generating the appropriate SQL.
*
* @param $selectClause
* @return string The SQL.
*/
public function walkSelectClause($selectClause)
{
$sql = parent::walkSelectClause($selectClause);

if ($this->getQuery()->getHint('mysqlWalker.sqlCalcFoundRows') === true) {
if ($selectClause->isDistinct) {
$sql = str_replace('SELECT DISTINCT', 'SELECT DISTINCT SQL_CALC_FOUND_ROWS', $sql);
} else {
$sql = str_replace('SELECT', 'SELECT SQL_CALC_FOUND_ROWS', $sql);
}
}

return $sql;
}
}
...
?>

рдлрд┐рд░ рдЖрд╡реЗрджрди рдХреЛрдб рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛:

<?php
$query = $em->createQuery("SELECT n FROM MyProject\Entity\News n WHERE n.date > '2011-01-01'");
$query->setMaxResults(10);

// Doctrine,
// , ,
$query->setHint(
\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER,
MyProject\\Entity\\Walkers\\MysqlPaginationWalker'
);
$query->setHint("mysqlWalker.sqlCalcFoundRows", true);

$news = $query->getResult();

// ,
$totalCount = $em->getConnection()->query('SELECT FOUND_ROWS()')->fetchColumn(0);
...
?>


рд╡рд╣ рд╕рдм рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

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


All Articles