{"id":1114,"date":"2025-06-12T13:17:26","date_gmt":"2025-06-12T05:17:26","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1114.html"},"modified":"2025-06-12T13:17:26","modified_gmt":"2025-06-12T05:17:26","slug":"%e5%9c%a8-doctrine-%e4%b8%ad%e4%bd%bf%e7%94%a8-and-or-%e8%bf%90%e7%ae%97%e7%ac%a6%ef%bc%9a%e5%ae%9e%e7%94%a8%e6%8c%87%e5%8d%97","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1114.html","title":{"rendered":"\u5728 Doctrine \u4e2d\u4f7f\u7528 AND &amp; OR \u8fd0\u7b97\u7b26\uff1a\u5b9e\u7528\u6307\u5357"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312; Doctrine &#20013;&#65292;&#20351;&#29992; <code>AND<\/code> &#21644; <code>OR<\/code> &#36816;&#31639;&#31526;&#21487;&#20197;&#36890;&#36807;&#32452;&#21512; <code>CriteriaBuilder<\/code> &#26469;&#23454;&#29616;&#12290;&#20197;&#19979;&#26159;&#19968;&#20010;&#23454;&#29992;&#30340;&#25351;&#21335;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312; Doctrine &#20013;&#20351;&#29992;&#36825;&#20123;&#36816;&#31639;&#31526;&#12290;<\/p>\n<h3>1. &#24341;&#20837;&#24517;&#35201;&#30340;&#31867;<\/h3>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#24341;&#20837; Doctrine &#30340;&#26680;&#24515;&#31867;&#21644; CriteriaBuilder &#31867;&#65306;<\/p>\n<pre><code class=\"language-php\">use DoctrineORMEntityManager;\nuse DoctrineORMQueryBuilder;<\/code><\/pre>\n<h3>2. &#21019;&#24314; EntityManager &#23454;&#20363;<\/h3>\n<p>&#25509;&#19979;&#26469;&#65292;&#21019;&#24314;&#19968;&#20010; EntityManager &#23454;&#20363;&#65292;&#24182;&#25351;&#23450;&#36830;&#25509;&#21040;&#25968;&#25454;&#24211;&#30340;&#37197;&#32622;&#65306;<\/p>\n<pre><code class=\"language-php\">$entityManager = EntityManager::create(\n    ['url' =&gt; 'mysql:\/\/username:password@localhost\/dbname'],\n    new DoctrineDBALConfiguration()\n);<\/code><\/pre>\n<h3>3. &#21019;&#24314; QueryBuilder &#23454;&#20363;<\/h3>\n<p>&#20351;&#29992; EntityManager &#23454;&#20363;&#21019;&#24314;&#19968;&#20010; QueryBuilder &#23454;&#20363;&#65306;<\/p>\n<pre><code class=\"language-php\">$queryBuilder = $entityManager-&gt;createQueryBuilder();<\/code><\/pre>\n<h3>4. &#20351;&#29992; CriteriaBuilder &#26500;&#24314;&#26597;&#35810;<\/h3>\n<p>&#20320;&#21487;&#20197;&#20351;&#29992; <code>CriteriaBuilder<\/code> &#26469;&#26500;&#24314;&#22797;&#26434;&#30340;&#26597;&#35810;&#26465;&#20214;&#12290;&#20363;&#22914;&#65292;&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21517;&#20026; <code>User<\/code> &#30340;&#23454;&#20307;&#65292;&#24182;&#19988;&#25105;&#20204;&#35201;&#26597;&#35810;&#24180;&#40836;&#22823;&#20110; 20 &#24182;&#19988;&#24615;&#21035;&#20026; &#8216;Male&#8217; &#30340;&#29992;&#25143;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ &#21019;&#24314; CriteriaBuilder &#23454;&#20363;\n$criteriaBuilder = $queryBuilder-&gt;getCriteria();\n\n\/\/ &#28155;&#21152;&#24180;&#40836;&#22823;&#20110; 20 &#30340;&#26465;&#20214;\n$ageCondition = $criteriaBuilder-&gt;expr()-&gt;gte('u.age', 20);\n\n\/\/ &#28155;&#21152;&#24615;&#21035;&#20026; 'Male' &#30340;&#26465;&#20214;\n$genderCondition = $criteriaBuilder-&gt;expr()-&gt;eq('u.gender', 'Male');\n\n\/\/ &#32452;&#21512;&#20004;&#20010;&#26465;&#20214;\n$combinedCondition = $criteriaBuilder-&gt;expr()-&gt;andX($ageCondition, $genderCondition);\n\n\/\/ &#35774;&#32622;&#26597;&#35810;&#26465;&#20214;\n$queryBuilder-&gt;where($combinedCondition);<\/code><\/pre>\n<h3>5. &#25191;&#34892;&#26597;&#35810;<\/h3>\n<p>&#26368;&#21518;&#65292;&#25191;&#34892;&#26597;&#35810;&#24182;&#33719;&#21462;&#32467;&#26524;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ &#33719;&#21462;&#25152;&#26377;&#31526;&#21512;&#26465;&#20214;&#30340; User &#23545;&#35937;\n$userQuery = $queryBuilder-&gt;getQuery();\n$users = $userQuery-&gt;getResult();\n\n\/\/ &#36755;&#20986;&#32467;&#26524;\nforeach ($users as $user) {\n    echo \"ID: {$user-&gt;getId()}, Name: {$user-&gt;getName()}, Age: {$user-&gt;getAge()}, Gender: {$user-&gt;getGender()}n\";\n}<\/code><\/pre>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20197;&#19979;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;&#31034;&#20363;&#20195;&#30721;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312; Doctrine &#20013;&#20351;&#29992; <code>AND<\/code> &#21644; <code>OR<\/code> &#36816;&#31639;&#31526;&#26469;&#26597;&#35810;&#25968;&#25454;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\nuse DoctrineORMEntityManager;\nuse DoctrineORMQueryBuilder;\n\n\/\/ &#20551;&#35774;&#20320;&#24050;&#32463;&#21019;&#24314;&#20102; EntityManager &#23454;&#20363;\n$entityManager = EntityManager::create(\n    ['url' =&gt; 'mysql:\/\/username:password@localhost\/dbname'],\n    new DoctrineDBALConfiguration()\n);\n\n\/\/ &#21019;&#24314; QueryBuilder &#23454;&#20363;\n$queryBuilder = $entityManager-&gt;createQueryBuilder();\n\n\/\/ &#21019;&#24314; CriteriaBuilder &#23454;&#20363;\n$criteriaBuilder = $queryBuilder-&gt;getCriteria();\n\n\/\/ &#28155;&#21152;&#24180;&#40836;&#22823;&#20110; 20 &#30340;&#26465;&#20214;\n$ageCondition = $criteriaBuilder-&gt;expr()-&gt;gte('u.age', 20);\n\n\/\/ &#28155;&#21152;&#24615;&#21035;&#20026; 'Male' &#30340;&#26465;&#20214;\n$genderCondition = $criteriaBuilder-&gt;expr()-&gt;eq('u.gender', 'Male');\n\n\/\/ &#32452;&#21512;&#20004;&#20010;&#26465;&#20214;\n$combinedCondition = $criteriaBuilder-&gt;expr()-&gt;andX($ageCondition, $genderCondition);\n\n\/\/ &#35774;&#32622;&#26597;&#35810;&#26465;&#20214;\n$queryBuilder-&gt;where($combinedCondition);\n\n\/\/ &#33719;&#21462;&#25152;&#26377;&#31526;&#21512;&#26465;&#20214;&#30340; User &#23545;&#35937;\n$userQuery = $queryBuilder-&gt;getQuery();\n$users = $userQuery-&gt;getResult();\n\n\/\/ &#36755;&#20986;&#32467;&#26524;\nforeach ($users as $user) {\n    echo \"ID: {$user-&gt;getId()}, Name: {$user-&gt;getName()}, Age: {$user-&gt;getAge()}, Gender: {$user-&gt;getGender()}n\";\n}\n?&gt;<\/code><\/pre>\n<p>&#36890;&#36807;&#36825;&#31181;&#26041;&#24335;&#65292;&#20320;&#21487;&#20197;&#22312; Doctrine &#20013;&#28789;&#27963;&#22320;&#20351;&#29992; <code>AND<\/code> &#21644; <code>OR<\/code> &#36816;&#31639;&#31526;&#26469;&#26500;&#24314;&#22797;&#26434;&#30340;&#25968;&#25454;&#26597;&#35810;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--2\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/zp-400x300.jpg\" alt=\"&#40657;&#26495;Bug&#35762;&#24072;\" class=\"wp-image-1849\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#40657;&#26495;Bug&#35762;&#24072;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<body><h2>&#20171;&#32461;<\/h2><p>&#22312;&#20351;&#29992;Doctrine&#22788;&#29702;&#22797;&#26434;&#26597;&#35810;&#36923;&#36753;&#26102;&#65292;&#29702;&#35299;&#27491;&#30830;&#30340;&#23454;&#29616;&#21644;&#20351;&#29992;&#36923;&#36753;&#36816;&#31639;&#31526;&#65288;&#22914;AND&#21644;OR&#65289;&#33267;&#20851;&#37325;&#35201;&#12290;&#36825;&#20123;&#36816;&#31639;&#31526;&#21487;&#20197;&#20351;&#24744;&#30340;&#26597;&#35810;&#21464;&#24471;&#26497;&#20854;&#24378;&#22823;&#65292;&#35753;&#24744;&#33021;&#22815;&#20174;&#25968;&#25454;&#24211;&#20013;&#25552;&#21462;&#38750;&#24120;&#31934;&#30830;&#30340;&#25968;&#25454;&#38598;&#12290;&#26412;&#25991;&#23558;&#25351;&#23548;&#24744;&#22914;&#20309;&#26377;&#25928;&#22320;&#20351;&#29992;AND&#19982;OR&#36816;&#31639;&#31526;&#12290;<\/p><h2>&#25968;&#25454;&#26597;&#35810;&#26500;&#24314;&#22120;&#30340;&#22522;&#26412;&#27010;&#24565;<\/h2><p>Doctrine&#65292;&#19968;&#20010;&#20026;PHP&#24320;&#21457;&#30340;&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#22120;&#65288;ORM&#65289;&#65292;&#25552;&#20379;&#20102;QueryBuilder&#25509;&#21475;&#65292;&#29992;&#20110;&#39640;&#25928;&#22320;&#21019;&#24314;&#21644;&#36816;&#34892;&#25968;&#25454;&#24211;&#26597;&#35810;&#12290;QueryBuilder&#36890;&#36807;&#23558;&#19968;&#20010;Doctrine&#26597;&#35810;&#35821;&#35328;&#65288;DQL&#65289;&#23454;&#20363;&#19982;&#26041;&#27861;&#32452;&#21512;&#36215;&#26469;&#65292;&#36825;&#20123;&#26041;&#27861;&#20197;&#31243;&#24207;&#21270;&#19988;&#38754;&#21521;&#23545;&#35937;&#30340;&#26041;&#24335;&#28155;&#21152;SQL&#26597;&#35810;&#30340;&#19981;&#21516;&#37096;&#20998;&#12290;<\/p><p>&#35753;&#25105;&#20204;&#20174;&#19968;&#20010;&#31616;&#21333;&#30340;&#31034;&#20363;&#26597;&#35810;&#24320;&#22987;&#65292;&#35813;&#26597;&#35810;&#29992;&#20110;&#25214;&#21040;&#25152;&#26377;&#27963;&#36291;&#19988;&#20855;&#26377;&#29305;&#23450;&#35282;&#33394;&#30340;&#29992;&#25143;&#65306;<\/p><pre><code>$userRepository = $entityManager-&gt;getRepository('User');\n$queryBuilder = $userRepository-&gt;createQueryBuilder('u');\n$queryBuilder-&gt;select('u')\n    -&gt;where('u.active = :active')\n    -&gt;andWhere('u.role = :role')\n    -&gt;setParameter('active', true)\n    -&gt;setParameter('role', 'admin');\n$query = $queryBuilder-&gt;getQuery();\n$result = $query-&gt;getResult();\n<\/code><\/pre><p>&#35813;&#26597;&#35810;&#20351;&#29992;QueryBuilder&#36873;&#25321;&#25152;&#26377;&#27963;&#36291;&#29366;&#24577;&#20026;true&#19988;&#35282;&#33394;&#23383;&#27573;&#31561;&#20110;&ldquo;admin&rdquo;&#30340;&#29992;&#25143;&#12290;<code>andWhere<\/code>&#26041;&#27861;&#26159;&#22312;&#26465;&#20214;&#21518;&#38468;&#21152;&#19968;&#20010;&#39069;&#22806;&#30340;&#26465;&#20214;&#12290;<code>where<\/code>&#24102;&#26377;AND&#25805;&#20316;&#31526;&#30340;&#23376;&#21477;&#12290;<\/p><h2>&#22312;&#26465;&#20214;&#20013;&#20351;&#29992;AND&#25805;&#20316;&#31526;&#12290;<\/h2><p>AND &#36816;&#31639;&#31526;&#20801;&#35768;&#24744;&#32467;&#21512;&#22810;&#20010;&#26465;&#20214;&#65292;&#20854;&#20013;&#27599;&#20010;&#26465;&#20214;&#37117;&#24517;&#39035;&#20026;&#30495;&#25165;&#33021;&#34987;&#35270;&#20026;&#21305;&#37197;&#30340;&#32467;&#26524;&#12290;&#32771;&#34385;&#20197;&#19979;&#35843;&#25972;&#21518;&#30340;&#26597;&#35810;&#65292;&#22312;&#35813;&#26597;&#35810;&#20013;&#65292;&#25105;&#20204;&#27491;&#22312;&#23547;&#25214;&#27963;&#36291;&#29992;&#25143;&#20197;&#21450;&#20182;&#20204;&#30340;&#22995;&#21517;&#31526;&#21512;&#26576;&#31181;&#27169;&#24335;&#30340;&#29992;&#25143;&#12290;<\/p><pre><code>$queryBuilder-&gt;select('u')\n    -&gt;where('u.active = :active')\n    -&gt;andWhere('u.role = :role')\n    -&gt;andWhere('u.name LIKE :namePattern')\n    -&gt;setParameters(array(\n        'active' =&gt; true,\n        'role' =&gt; 'admin',\n        'namePattern' =&gt; '%Smith%'\n    ));\n$query = $queryBuilder-&gt;getQuery();\n$result = $query-&gt;getResult();\n<\/code><\/pre><p>&#22312;&#36825;&#37324;&#65292;&#25105;&#20204;&#21448;&#38142;&#20102;&#19968;&#20010;&#12290;<code>andWhere<\/code>&#21253;&#25324;&#19968;&#20010;LIKE&#26597;&#35810;&#12290;&#36825;&#24847;&#21619;&#30528;&#25152;&#26377;&#31526;&#21512;&#26465;&#20214;&#30340;&#35760;&#24405;&#37117;&#20250;&#34987;&#36820;&#22238;&#12290;<code>andWhere<\/code>&#26465;&#20214;&#24212;&#21516;&#26102;&#28385;&#36275;&#12290;<\/p><h2>&#20351;&#29992; OR &#36830;&#25509;&#26465;&#20214;<\/h2><p>&#26377;&#26102;&#65292;&#24744;&#21487;&#33021;&#24076;&#26395;&#36873;&#25321;&#28385;&#36275;&#20854;&#20013;&#19968;&#20010;&#26465;&#20214;&#25110;&#21478;&#19968;&#20010;&#26465;&#20214;&#30340;&#35760;&#24405;&#65307;&#36825;&#26102;OR&#36816;&#31639;&#31526;&#23601;&#27966;&#19978;&#29992;&#22330;&#20102;&#12290;&#35753;&#25105;&#20204;&#20462;&#25913;&#20043;&#21069;&#30340;&#26597;&#35810;&#65292;&#20197;&#25214;&#21040;&#26082;&#26159;&#27963;&#36291;&#31649;&#29702;&#21592;&#21448;&#26159;&#25317;&#26377;Smith&#22995;&#27663;&#30340;&#29992;&#25143;&#65306;<\/p><pre><code>$queryBuilder-&gt;select('u')\n    -&gt;where('u.active = :active')\n    -&gt;andWhere('u.role = :role')\n    -&gt;orWhere('u.name LIKE :namePattern')\n    -&gt;setParameters(array(\n        'active' =&gt; true,\n        'role' =&gt; 'admin',\n        'namePattern' =&gt; '%Smith%'\n    ));\n$query = $queryBuilder-&gt;getQuery();\n$result = $query-&gt;getResult();\n<\/code><\/pre><p>&#36890;&#36807;&#20351;&#29992;<code>orWhere<\/code>&#25105;&#20204;&#21487;&#20197;&#36890;&#36807;&#25918;&#26494;&#26465;&#20214;&#26469;&#25805;&#20316;&#65292;&#36873;&#25321;&#25152;&#26377;&#27963;&#36291;&#30340;&#31649;&#29702;&#21592;&#20197;&#21450;&#21517;&#20026;Smith&#30340;&#29992;&#25143;&#65292;&#21363;&#20351;&#21518;&#32773;&#27809;&#26377;&#31649;&#29702;&#21592;&#35282;&#33394;&#12290;<\/p><h2>&#22312;&#26465;&#20214;&#35821;&#21477;&#20013;&#20351;&#29992;AND&#21644;OR&#26465;&#20214;<\/h2><p>&#22312;&#26576;&#20123;&#24773;&#20917;&#19979;&#65292;&#20320;&#38656;&#35201;&#23884;&#22871;&#26465;&#20214;&#20197;&#28385;&#36275;&#26356;&#22797;&#26434;&#30340;&#35268;&#21017;&#12290;&#20026;&#20102;&#31934;&#30830;&#25511;&#21046;&#36923;&#36753;&#65292;&#25105;&#20204;&#20351;&#29992;&#26465;&#20214;&#35821;&#21477;&#12290;<code>expr()<\/code>&#26041;&#27861;&#25552;&#20379;&#20102;&#19968;&#31181;&#27969;&#21033;&#30340;&#25509;&#21475;&#26469;&#26500;&#24314;&#34920;&#36798;&#24335;&#12290;&#20551;&#35774;&#25105;&#20204;&#24819;&#35201;&#27963;&#36291;&#29992;&#25143;&#65292;&#36825;&#20123;&#29992;&#25143;&#35201;&#20040;&#26159;&#31649;&#29702;&#21592;&#65292;&#35201;&#20040;&#26159;&#21517;&#20026;Smith&#65292;&#19988;&#27880;&#20876;&#26085;&#26399;&#22312;2020&#24180;&#20043;&#21518;&#12290;<\/p><pre><code>$queryBuilder-&gt;select('u')\n    -&gt;where('u.active = :active')\n    -&gt;andWhere(\n        $queryBuilder-&gt;expr()-&gt;orX(\n            $queryBuilder-&gt;expr()-&gt;eq('u.role', ':role'),\n            $queryBuilder-&gt;expr()-&gt;like('u.name', ':namePattern')\n        )\n    )\n    -&gt;andWhere('u.signupDate &gt; :signupDate')\n    -&gt;setParameters(array(\n        'active' =&gt; true,\n        'role' =&gt; 'admin',\n        'namePattern' =&gt; '%Smith%',\n        'signupDate' =&gt; '2020-01-01'\n    ));\n$query = $queryBuilder-&gt;getQuery();\n$result = $query-&gt;getResult();\n<\/code><\/pre><p>&#36825;&#20801;&#35768;&#25105;&#20204;&#22312;&#19968;&#20010;AND&#32452;&#20869;&#21019;&#24314;&#21253;&#21547;&#23884;&#22871;&#30340;OR&#26465;&#20214;&#30340;&#26597;&#35810;&#12290;<code>expr()-&gt;orX()<\/code>&#26041;&#27861;&#21487;&#20197;&#20316;&#20026;&#21442;&#25968;&#25509;&#21463;&#26080;&#38480;&#20010;&#26465;&#20214;&#65292;&#36825;&#20123;&#26465;&#20214;&#36890;&#36807;&ldquo;&#25110;&rdquo;&#36830;&#25509;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>&#36923;&#36753;&#36816;&#31639;&#31526;&#22312;Doctrine&#20013;&#26159;&#19968;&#31181;&#24378;&#22823;&#30340;&#29305;&#24615;&#65292;&#21487;&#20197;&#24110;&#21161;&#24744;&#20026;&#25968;&#25454;&#24211;&#21019;&#24314;&#26368;&#39640;&#25928;&#21644;&#26377;&#38024;&#23545;&#24615;&#30340;&#26597;&#35810;&#12290;&#35831;&#27880;&#24847;&#65292;&#22312;&#23581;&#35797;&#20351;&#29992;Doctrine&#21019;&#24314;&#38750;&#24120;&#22797;&#26434;&#30340;&#26597;&#35810;&#26102;&#35201;&#23567;&#24515;&#24615;&#33021;&#30340;&#24433;&#21709;&#65292;&#24182;&#22987;&#32456;&#36890;&#36807;&#20998;&#26512;&#26469;&#30830;&#20445;&#26597;&#35810;&#23613;&#21487;&#33021;&#39640;&#25928;&#12290;<\/p><p>&#26368;&#21518;&#65292;&#34429;&#28982;&#26412;&#25351;&#21335;&#20027;&#35201;&#20171;&#32461;&#20102;&#22914;&#20309;&#20351;&#29992;AND&#21644;OR&#36816;&#31639;&#31526;&#26469;&#36873;&#25321;&#25968;&#25454;&#65292;&#20294;Doctrine&#30340;QueryBuilder&#36824;&#25903;&#25345;&#36825;&#20123;&#36923;&#36753;&#25805;&#20316;&#22312;&#20854;&#20182;&#35821;&#21477;&#20013;&#65292;&#20363;&#22914;UPDATE&#21644;DELETE&#35821;&#21477;&#12290;&#35831;&#33457;&#20123;&#26102;&#38388;&#25506;&#32034;Doctrine&#25991;&#26723;&#24182;&#25484;&#25569;&#25152;&#26377;&#21487;&#20197;&#21033;&#29992;&#36923;&#36753;&#36816;&#31639;&#31526;&#22686;&#24378;PHP&#24212;&#29992;&#31243;&#24207;&#25968;&#25454;&#24211;&#20132;&#20114;&#30340;&#26041;&#27861;&#12290;<\/p><\/body>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--3\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/xygcfznnzczhsdmwydzhsmzzzmddnq-400x300.jpg\" alt=\"&#38271;&#24037;&#30721;&#22900;1523\" class=\"wp-image-2906\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#38271;&#24037;&#30721;&#22900;1523<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312; Doctrine ORM&#65288;&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#65289;&#20013;&#65292;AND&#21644;OR&#36816;&#31639;&#31526;&#29992;&#20110;&#36807;&#28388;&#26597;&#35810;&#32467;&#26524;&#12290;&#36825;&#20004;&#31181;&#25805;&#20316;&#31526;&#21487;&#20197;&#29992;&#26469;&#32452;&#21512;&#22810;&#20010;&#26465;&#20214;&#65292;&#20197;&#20415;&#36820;&#22238;&#28385;&#36275;&#25152;&#26377;&#26465;&#20214;&#30340;&#35760;&#24405;&#12290;<\/p>\n<h3>&#20351;&#29992;AND&#36816;&#31639;&#31526;<\/h3>\n<p>&#24403;&#24744;&#24819;&#35201;&#20174;&#25968;&#25454;&#24211;&#20013;&#26816;&#32034;&#29305;&#23450;&#23383;&#27573;&#30340;&#25152;&#26377;&#20540;&#26102;&#65292;&#24744;&#21487;&#20197;&#20351;&#29992;<code>AND<\/code>&#36816;&#31639;&#31526;&#26469;&#32452;&#21512;&#22810;&#20010;&#26465;&#20214;&#12290;&#20197;&#19979;&#26159;&#19968;&#20010;&#20363;&#23376;&#65306;<\/p>\n<pre><code class=\"language-php\">$em = $this-&gt;getDoctrine()-&gt;getManager();\n\n\/\/ &#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21517;&#20026;\"employees\"&#30340;&#34920;&#65292;&#24182;&#19988;&#25105;&#20204;&#35201;&#26597;&#25214;&#21592;&#24037;ID&#20026;12345&#24182;&#19988;&#24180;&#40836;&#22823;&#20110;&#31561;&#20110;30&#30340;&#21592;&#24037;&#12290;\n$query = $em-&gt;createQuery('SELECT e FROM Employee e WHERE e.id = :id AND e.age &gt;= 30');\n$query-&gt;setParameter('id', 12345);\n\n$employees = $query-&gt;getResult();<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#39318;&#20808;&#21019;&#24314;&#20102;&#19968;&#20010;SQL&#35821;&#21477;&#65292;&#28982;&#21518;&#20351;&#29992;<code>EntityManager::createQuery()<\/code>&#26041;&#27861;&#25191;&#34892;&#23427;&#12290;&#26368;&#21518;&#65292;&#25105;&#20204;&#36890;&#36807;&#35774;&#32622;&#21442;&#25968;&#26469;&#33719;&#21462;&#32467;&#26524;&#38598;&#12290;<\/p>\n<h3>&#20351;&#29992;OR&#36816;&#31639;&#31526;<\/h3>\n<p>&#22914;&#26524;&#24744;&#30340;&#26597;&#35810;&#38656;&#35201;&#36820;&#22238;&#33267;&#23569;&#28385;&#36275;&#20854;&#20013;&#19968;&#20010;&#26465;&#20214;&#30340;&#32467;&#26524;&#65292;&#37027;&#20040;&#24744;&#24212;&#35813;&#20351;&#29992;<code>OR<\/code>&#36816;&#31639;&#31526;&#12290;&#20363;&#22914;&#65292;&#20551;&#35774;&#25105;&#20204;&#38656;&#35201;&#26597;&#25214;&#24180;&#40836;&#23567;&#20110;30&#25110;&#32773;&#24180;&#40836;&#22823;&#20110;60&#30340;&#21592;&#24037;&#65306;<\/p>\n<pre><code class=\"language-php\">$em = $this-&gt;getDoctrine()-&gt;getManager();\n\n\/\/ &#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21517;&#20026;\"employees\"&#30340;&#34920;&#65292;&#24182;&#19988;&#25105;&#20204;&#35201;&#26597;&#25214;&#24180;&#40836;&#23567;&#20110;30&#25110;&#32773;&#24180;&#40836;&#22823;&#20110;60&#30340;&#21592;&#24037;&#12290;\n$query = $em-&gt;createQuery('SELECT e FROM Employee e WHERE e.age &lt; 30 OR e.age &gt; 60');\n\n$employees = $query-&gt;getResult();<\/code><\/pre>\n<p>&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#23558;&#20004;&#20010;&#19981;&#21516;&#30340;&#26465;&#20214;&#32452;&#21512;&#22312;&#19968;&#36215;&#65292;&#36825;&#26679;&#23601;&#21487;&#20197;&#36820;&#22238;&#21516;&#26102;&#28385;&#36275;&#36825;&#20004;&#20010;&#26465;&#20214;&#30340;&#21592;&#24037;&#20102;&#12290;<\/p>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#19979;&#38754;&#26159;&#19968;&#20010;&#31616;&#21333;&#30340;PHP&#31867;&#65292;&#23637;&#31034;&#22914;&#20309;&#20351;&#29992;&#36825;&#20004;&#31181;&#36816;&#31639;&#31526;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nclass EmployeeRepository extends DoctrineORMEntityRepository {\n    public function getEmployeesByAgeRange($minAge, $maxAge) {\n        $qb = $this-&gt;createQueryBuilder('e')\n            -&gt;where(\n                $qb-&gt;expr()-&gt;orX(\n                    $qb-&gt;expr()-&gt;lt('e.age', ':minAge'),\n                    $qb-&gt;expr()-&gt;gt('e.age', ':maxAge')\n                )\n            );\n\n        $qb-&gt;setParameter(':minAge', $minAge);\n        $qb-&gt;setParameter(':maxAge', $maxAge);\n\n        return $qb-&gt;getQuery()\n            -&gt;getResult();\n    }\n}\n\n\/\/ &#20351;&#29992;&#31034;&#20363;\n$employeeRepo = new EmployeeRepository();\n$employees = $employeeRepo-&gt;getEmployeesByAgeRange(30, 50);<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#23450;&#20041;&#20102;&#19968;&#20010;<code>EmployeeRepository<\/code>&#31867;&#65292;&#20854;&#20013;&#21253;&#21547;&#19968;&#20010;<code>getEmployeesByAgeRange<\/code>&#26041;&#27861;&#65292;&#35813;&#26041;&#27861;&#25509;&#21463;&#20004;&#20010;&#24180;&#40836;&#33539;&#22260;&#20316;&#20026;&#21442;&#25968;&#24182;&#36820;&#22238;&#31526;&#21512;&#26465;&#20214;&#30340;&#21592;&#24037;&#21015;&#34920;&#12290;<\/p>\n<h3>&#27880;&#24847;&#20107;&#39033;<\/h3>\n<ul>\n<li><code>WHERE<\/code>&#23376;&#21477;&#20013;&#30340;<code>OR<\/code>&#21644;<code>AND<\/code>&#36816;&#31639;&#31526;&#24517;&#39035;&#26159;&#19982;&#25968;&#25454;&#24211;&#20013;&#30340;&#34920;&#36798;&#24335;&#30456;&#23545;&#24212;&#30340;&#65292;&#21542;&#21017;&#23558;&#24341;&#21457;&#38169;&#35823;&#12290;<\/li>\n<li>&#22312;&#20351;&#29992;&#36825;&#20123;&#36816;&#31639;&#31526;&#20043;&#21069;&#65292;&#35831;&#30830;&#20445;&#24744;&#30340;&#25968;&#25454;&#27169;&#22411;&#24050;&#32463;&#27491;&#30830;&#22320;&#23450;&#20041;&#20102;&#30456;&#24212;&#30340;&#23454;&#20307;&#23646;&#24615;&#12290;<\/li>\n<\/ul>\n<p>&#24076;&#26395;&#36825;&#23545;&#20320;&#26377;&#25152;&#24110;&#21161;&#65281;&#22914;&#26524;&#20320;&#26377;&#20219;&#20309;&#30097;&#38382;&#25110;&#38656;&#35201;&#36827;&#19968;&#27493;&#30340;&#24110;&#21161;&#65292;&#35831;&#38543;&#26102;&#25552;&#38382;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#22312; Doctrine &#20013;&#65292;&#20351;&#29992; AND &#21644; OR &#36816;&#31639;&#31526;&#21487;&#20197;&#36890;&#36807;&#32452;&#038;..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1114","my1js","type-my1js","status-publish","hentry","my1js2nav-symfony"],"acf":{"qian_art_seotitle":"","qian_art_seotitle_source":{"label":"SEO\u6807\u9898","type":"text","formatted_value":""},"qian_art_seokws":"","qian_art_seokws_source":{"label":"SEO\u5173\u952e\u8bcd","type":"text","formatted_value":""},"qian_art_stzhong":"","qian_art_stzhong_source":{"label":"\u4e2d | \u77ed\u6807\u9898","type":"text","formatted_value":""}},"_links":{"self":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js\/1114","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js"}],"about":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/types\/my1js"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/users\/1"}],"wp:attachment":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/media?parent=1114"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1114"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1114"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1114"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}