{"id":1104,"date":"2025-06-12T13:00:56","date_gmt":"2025-06-12T05:00:56","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1104.html"},"modified":"2025-06-12T13:00:56","modified_gmt":"2025-06-12T05:00:56","slug":"doctrine%e4%b8%ad%e7%9a%84%e5%ad%90%e6%9f%a5%e8%af%a2%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\/1104.html","title":{"rendered":"Doctrine\u4e2d\u7684\u5b50\u67e5\u8be2\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>&#26631;&#39064;&#65306; Doctrine &#20013;&#30340;&#23376;&#26597;&#35810;&#65306;&#23454;&#29992;&#25351;&#21335;<\/p>\n<p>&#22312;&#25968;&#25454;&#24211;&#32534;&#31243;&#20013;&#65292;&#23376;&#26597;&#35810;&#26159;&#19968;&#31181;&#38750;&#24120;&#24378;&#22823;&#19988;&#28789;&#27963;&#30340;&#24037;&#20855;&#65292;&#21487;&#20197;&#29992;&#26469;&#20174;&#19968;&#20010;&#26597;&#35810;&#32467;&#26524;&#20013;&#25552;&#21462;&#25968;&#25454;&#24182;&#23558;&#20854;&#29992;&#20316;&#21478;&#19968;&#20010;&#26597;&#35810;&#30340;&#19968;&#37096;&#20998;&#12290;&#23545;&#20110;&#20351;&#29992; Doctrine &#36827;&#34892;&#25968;&#25454;&#24211;&#25805;&#20316;&#30340;&#24320;&#21457;&#32773;&#26469;&#35828;&#65292;&#29702;&#35299;&#22914;&#20309;&#22312; Doctrine &#20013;&#20351;&#29992;&#23376;&#26597;&#35810;&#26159;&#38750;&#24120;&#37325;&#35201;&#30340;&#12290;<\/p>\n<p>&#20197;&#19979;&#26159;&#19968;&#20123;&#20851;&#20110;&#22312; Doctrine &#20013;&#20351;&#29992;&#23376;&#26597;&#35810;&#30340;&#22522;&#26412;&#27493;&#39588;&#21644;&#31034;&#20363;&#20195;&#30721;&#65306;<\/p>\n<h3>1. &#20934;&#22791;&#27169;&#22411;<\/h3>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#23450;&#20041;&#20320;&#30340;&#23454;&#20307;&#31867;&#65292;&#24182;&#30830;&#20445;&#23427;&#20204;&#19982;&#25968;&#25454;&#24211;&#34920;&#30456;&#21305;&#37197;&#12290;&#20363;&#22914;&#65292;&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010; <code>User<\/code> &#23454;&#20307;&#31867;&#21644;&#19968;&#20010; <code>Post<\/code> &#23454;&#20307;&#31867;&#65292;&#20854;&#20013; <code>User<\/code> &#34920;&#21253;&#21547; <code>id<\/code> &#21644; <code>name<\/code> &#23383;&#27573;&#65292;&#32780; <code>Post<\/code> &#34920;&#21253;&#21547; <code>id<\/code>&#12289;<code>title<\/code> &#21644; <code>user_id<\/code> &#23383;&#27573;&#12290;<\/p>\n<pre><code class=\"language-php\">\/\/ User.php\nnamespace AppEntity;\n\nuse DoctrineORMMapping as ORM;\n\n\/**\n * @ORMEntity(repositoryClass=\"AppRepositoryUserRepository\")\n *\/\nclass User\n{\n    \/**\n     * @ORMId()\n     * @ORMGeneratedValue(strategy=\"AUTO\")\n     * @ORMColumn(type=\"integer\")\n     *\/\n    private $id;\n\n    \/**\n     * @ORMColumn(type=\"string\", length=255)\n     *\/\n    private $name;\n\n    \/\/ Getters and setters\n}\n\n\/\/ Post.php\nnamespace AppEntity;\n\nuse DoctrineORMMapping as ORM;\n\n\/**\n * @ORMEntity(repositoryClass=\"AppRepositoryPostRepository\")\n *\/\nclass Post\n{\n    \/**\n     * @ORMId()\n     * @ORMGeneratedValue(strategy=\"AUTO\")\n     * @ORMColumn(type=\"integer\")\n     *\/\n    private $id;\n\n    \/**\n     * @ORMColumn(type=\"string\", length=255)\n     *\/\n    private $title;\n\n    \/**\n     * @ORMManyToOne(targetEntity=\"User\", inversedBy=\"posts\")\n     * @ORMJoinColumn(name=\"user_id\", referencedColumnName=\"id\")\n     *\/\n    private $user;\n\n    \/\/ Getters and setters\n}<\/code><\/pre>\n<h3>2. &#20351;&#29992;&#23376;&#26597;&#35810;&#36827;&#34892;&#26597;&#35810;<\/h3>\n<p>&#29616;&#22312;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992; Doctrine &#30340; QueryBuilder &#25110;&#32773;&#30452;&#25509;&#22312; Repository &#31867;&#20013;&#32534;&#20889; SQL &#26597;&#35810;&#26469;&#20351;&#29992;&#23376;&#26597;&#35810;&#12290;<\/p>\n<h4>&#20351;&#29992; QueryBuilder<\/h4>\n<pre><code class=\"language-php\">\/\/ UserRepository.php\nnamespace AppRepository;\n\nuse DoctrineORMQuery;\nuse DoctrineORMEntityRepository;\n\nclass UserRepository extends EntityRepository\n{\n    public function findUsersWithPosts()\n    {\n        $query = $this-&gt;createQueryBuilder('u')\n            -&gt;select('u.name, p.title')\n            -&gt;leftJoin('u.posts', 'p');\n\n        return $query-&gt;getQuery()-&gt;getResult();\n    }\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#20351;&#29992;&#20102; <code>leftJoin<\/code> &#26041;&#27861;&#23558; <code>User<\/code> &#23454;&#20307;&#19982;&#20854;&#20851;&#32852;&#30340; <code>Post<\/code> &#23454;&#20307;&#36830;&#25509;&#36215;&#26469;&#65292;&#24182;&#36873;&#25321;&#20102; <code>User<\/code> &#30340;&#21517;&#31216;&#21644; <code>Post<\/code> &#30340;&#26631;&#39064;&#12290;<\/p>\n<h4>&#30452;&#25509;&#22312; Repository &#31867;&#20013;&#32534;&#20889; SQL &#26597;&#35810;<\/h4>\n<pre><code class=\"language-php\">\/\/ UserRepository.php\nnamespace AppRepository;\n\nuse DoctrineORMEntityRepository;\n\nclass UserRepository extends EntityRepository\n{\n    public function findUsersWithPosts()\n    {\n        $entityManager = $this-&gt;getEntityManager();\n\n        $subQuery = $entityManager-&gt;createQueryBuilder()\n            -&gt;from('AppEntityPost', 'p')\n            -&gt;select('p.user_id');\n\n        $query = $entityManager-&gt;createQueryBuilder()\n            -&gt;from('AppEntityUser', 'u')\n            -&gt;select('u.name, p.title')\n            -&gt;where('u.id IN (:userId)')\n            -&gt;setParameter('userId', $subQuery-&gt;getQuery()-&gt;getResult());\n\n        return $query-&gt;getQuery()-&gt;getResult();\n    }\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#20351;&#29992;&#20102;&#23376;&#26597;&#35810;&#26469;&#31579;&#36873;&#20986;&#29305;&#23450;&#29992;&#25143;&#30340; <code>Post<\/code> &#23454;&#20307;&#65292;&#24182;&#36873;&#25321;&#20102;&#36825;&#20123; <code>Post<\/code> &#30340;&#29992;&#25143;&#21517;&#31216;&#21644;&#26631;&#39064;&#12290;<\/p>\n<h3>&#24635;&#32467;<\/h3>\n<p>&#36890;&#36807;&#20102;&#35299;&#21644;&#20351;&#29992; Doctrine &#20013;&#30340;&#23376;&#26597;&#35810;&#65292;&#20320;&#21487;&#20197;&#26356;&#26377;&#25928;&#22320;&#31649;&#29702;&#21644;&#26597;&#35810;&#25968;&#25454;&#24211;&#25968;&#25454;&#12290;&#26080;&#35770;&#26159;&#20351;&#29992; QueryBuilder &#36824;&#26159;&#30452;&#25509;&#32534;&#20889; SQL &#26597;&#35810;&#65292;&#37117;&#33021;&#35753;&#20320;&#30340;&#20195;&#30721;&#26356;&#21152;&#28789;&#27963;&#21644;&#39640;&#25928;&#12290;&#24076;&#26395;&#36825;&#31687;&#25351;&#21335;&#23545;&#20320;&#26377;&#25152;&#24110;&#21161;&#65281;<\/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;&#22788;&#29702;&#22797;&#26434;&#25968;&#25454;&#24211;&#26102;&#65292;&#23376;&#26597;&#35810;&#23545;&#20110;&#24320;&#21457;&#20154;&#21592;&#25191;&#34892;&#39640;&#25928;&#30340;&#25968;&#25454;&#26816;&#32034;&#20219;&#21153;&#33267;&#20851;&#37325;&#35201;&#12290;PHP&#20013;&#30340;Doctrine ORM&#25552;&#20379;&#20102;&#24378;&#22823;&#30340;&#21151;&#33021;&#26469;&#25191;&#34892;&#23376;&#26597;&#35810;&#65292;&#36825;&#20123;&#23376;&#26597;&#35810;&#26082;&#24615;&#33021;&#21451;&#22909;&#21448;&#26131;&#20110;&#20351;&#29992;&#12290;&#26412;&#23454;&#29992;&#25351;&#21335;&#23558;&#24110;&#21161;&#24744;&#29702;&#35299;&#22914;&#20309;&#22312;Doctrine&#20013;&#21033;&#29992;&#23376;&#26597;&#35810;&#20197;&#22686;&#24378;&#24744;&#30340;&#25968;&#25454;&#25805;&#20316;&#33021;&#21147;&#12290;<\/p><h2>&#29702;&#35299;&#23376;&#26597;&#35810;<\/h2><p>&#23376;&#26597;&#35810;&#25110;&#20869;&#26597;&#35810;&#26159;&#22312;&#21478;&#19968;&#20010;SQL&#35821;&#21477;&#20869;&#37096;&#30340;&#26597;&#35810;&#12290;&#23376;&#26597;&#35810;&#21487;&#20197;&#22312;SQL&#35821;&#21477;&#30340;&#19981;&#21516;&#37096;&#20998;&#20351;&#29992;&#65292;&#20363;&#22914;SELECT&#12289;FROM&#21644;WHERE&#23376;&#21477;&#12290;&#22312;Doctrine&#20013;&#65292;&#20320;&#20027;&#35201;&#20250;&#24037;&#20316;&#20110;DQL&#65288;Doctrine&#26597;&#35810;&#35821;&#35328;&#65289;&#19978;&#65292;&#36825;&#26159;&#19968;&#31181;&#38754;&#21521;&#23545;&#35937;&#30340;&#26597;&#35810;&#35821;&#35328;&#65292;&#23427;&#25805;&#20316;&#30340;&#26159;&#23454;&#20307;&#23545;&#35937;&#32780;&#19981;&#26159;&#30452;&#25509;&#25968;&#25454;&#24211;&#34920;&#12290;<\/p><p>&#22312;&#28145;&#20837;&#20195;&#30721;&#31034;&#20363;&#20043;&#21069;&#65292;&#35831;&#30830;&#20445;&#24744;&#24050;&#23433;&#35013;&#24182;&#37197;&#32622;&#20102;Doctrine&#26694;&#26550;&#12290;&#22312;&#26412;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#20551;&#35774;&#24744;&#24050;&#32463;&#20026;&#39033;&#30446;&#35774;&#32622;&#20102;&#19968;&#20010;Doctrine&#23454;&#20307;&#31649;&#29702;&#22120;&#65292;&#24182;&#23558;&#20854;&#36830;&#25509;&#21040;&#25968;&#25454;&#24211;&#12290;<\/p><h2>&#22312;WHERE&#23376;&#21477;&#20013;&#20351;&#29992;&#23376;&#26597;&#35810;<\/h2><p>&#26368;&#24120;&#35265;&#30340;&#23376;&#26597;&#35810;&#29992;&#36884;&#20043;&#19968;&#26159;&#22312;WHERE&#23376;&#21477;&#20013;&#26681;&#25454;&#21478;&#19968;&#20010;&#26597;&#35810;&#26465;&#20214;&#36807;&#28388;&#32467;&#26524;&#12290;&#20197;&#19979;&#31034;&#20363;&#23637;&#31034;&#20102;&#22312;WHERE&#23376;&#21477;&#20013;&#30340;&#23376;&#26597;&#35810;&#12290;<\/p><pre><code>$entityManager = GetEntityManager();\n$queryBuilder = $entityManager-&gt;createQueryBuilder();\n\n$subQuery = $queryBuilder-&gt;subselect('u.id')\n    -&gt;from('User', 'u')\n    -&gt;where('u.age &gt; 20');\n\n$mainQuery = $queryBuilder\n    -&gt;select('p')\n    -gt;from('Profile', 'p')\n    -&gt;where($queryBuilder-&gt;expr()-&gt;in('p.user_id', $subQuery-&gt;getDQL()));\n\n$results = $mainQuery-&gt;getQuery()-&gt;getResult();<\/code><\/pre><p>&#22312;&#36825;&#31181;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#26816;&#32034;&#25152;&#26377;&#24180;&#40836;&#36229;&#36807;20&#23681;&#30340;&#29992;&#25143;&#36164;&#26009;&#12290;&#35831;&#27880;&#24847;&#65292;&#25105;&#20204;&#20351;&#29992;&#20102;&ldquo;&#23376;&#26597;&#35810;&rdquo;&#26041;&#27861;&#26469;&#26500;&#24314;&#25105;&#20204;&#30340;&#23376;&#26597;&#35810;&#65292;&#24182;&#36890;&#36807;&ldquo;in&rdquo;&#26041;&#27861;&#23558;&#20854;&#21253;&#21547;&#22312;&#20027;&#26597;&#35810;&#20013;&#12290;<\/p><h2>&#22312;SELECT&#23376;&#21477;&#20013;&#30340;&#23376;&#26597;&#35810;<\/h2><p>&#24744;&#21487;&#20197;&#20351;&#29992;SELECT&#23376;&#21477;&#20013;&#30340;&#23376;&#26597;&#35810;&#36820;&#22238;&#19982;&#32467;&#26524;&#30456;&#20851;&#30340;&#35745;&#31639;&#25968;&#25454;&#12290;&#20197;&#19979;&#26159;&#31034;&#20363;&#65306;<\/p><pre><code>$entityManager = GetEntityManager();\n$queryBuilder = $entityManager-&gt;createQueryBuilder();\n\n$subQuery = $queryBuilder-&gt;subselect('COUNT(o.id)')\n    -&gt;from('Order', 'o')\n    -&gt;where('o.user = u.id AND o.status = :status')\n    -&gt;setParameter('status', 'processed');\n\n$mainQuery = $queryBuilder\n    -&gt;select(['u', '(' . $subQuery-&gt;getDQL() . ') AS ordersCount'])\n    -&gt;from('User', 'u');\n\n$results = $mainQuery-&gt;getQuery()-&gt;getResult();<\/code><\/pre><p>&#22312;&#36825;&#31181;&#24773;&#20917;&#19979;&#65292;&#25105;&#20204;&#23558;&#36873;&#25321;&#25152;&#26377;&#29992;&#25143;&#21450;&#20854;&#24050;&#23436;&#25104;&#35746;&#21333;&#30340;&#25968;&#37327;&#12290;&#25105;&#20204;&#21019;&#24314;&#20102;&#19968;&#20010;&#23376;&#26597;&#35810;&#26469;&#35745;&#31639;&#27599;&#20010;&#29992;&#25143;&#30340;&#24050;&#23436;&#25104;&#35746;&#21333;&#25968;&#37327;&#65292;&#24182;&#23558;&#20854;&#21253;&#21547;&#22312;&#20027;SELECT&#35821;&#21477;&#20013;&#12290;<\/p><h2>&#19982;&#23376;&#26597;&#35810;&#32467;&#21512;<\/h2><p>&#23376;&#26597;&#35810;&#20063;&#21487;&#20197;&#22312;JOIN&#35821;&#21477;&#20013;&#20351;&#29992;&#65292;&#29992;&#20110;&#26681;&#25454;&#22797;&#26434;&#30340;&#26465;&#20214;&#25110;&#24744;&#22312;&#36816;&#34892;&#26102;&#35745;&#31639;&#30340;&#32858;&#21512;&#26465;&#20214;&#26469;&#36830;&#25509;&#34920;&#12290;&#20197;&#19979;&#26159;&#19968;&#20010;&#31034;&#20363;&#65306;<\/p><pre><code>$entityManager = GetEntityManager();\n$queryBuilder = $entityManager-&gt;createQueryBuilder();\n\n$subQuery = $queryBuilder-&gt;subselect('o.userId, SUM(o.amount) as totalAmount')\n    -&gt;from('Order', 'o')\n    -&gt;groupBy('o.userId');\n\n$mainQuery = $queryBuilder\n    -&gt;select('u.name', 'orderInfo.totalAmount')\n    -&gt;from('User', 'u')\n    -&gt;leftJoin('('. $subQuery-&gt;getDQL() .')', 'orderInfo', 'WITH', 'u.id = orderInfo.userId');\n\n$results = $mainQuery-&gt;getQuery()-&gt;getResult();<\/code><\/pre><p>&#36825;&#20010;&#29255;&#27573;&#21033;&#29992;&#23376;&#26597;&#35810;&#35745;&#31639;&#27599;&#20010;&#29992;&#25143;&#30340;&#35746;&#21333;&#24635;&#39069;&#65292;&#28982;&#21518;&#36890;&#36807;&#24038;&#36830;&#25509;&#19982;&#20027;&#29992;&#25143;&#26597;&#35810;&#30456;&#32467;&#21512;&#65292;&#33719;&#21462;&#29992;&#25143;&#22995;&#21517;&#20197;&#21450;&#20182;&#20204;&#21508;&#33258;&#30340;&#35746;&#21333;&#24635;&#39069;&#12290;<\/p><h2>&#24615;&#33021;&#32771;&#34385;&#22240;&#32032;<\/h2><p>&#34429;&#28982;&#23376;&#26597;&#35810;&#38750;&#24120;&#24378;&#22823;&#65292;&#20294;&#24212;&#35880;&#24910;&#20351;&#29992;&#23427;&#20204;&#20197;&#36991;&#20813;&#24615;&#33021;&#38382;&#39064;&#12290;Doctrine&#20013;&#20248;&#21270;&#23376;&#26597;&#35810;&#30340;&#24314;&#35758;&#21253;&#25324;&#65306;<\/p><p>&#27880;&#24847;&#23376;&#26597;&#35810;&#36755;&#20986;&#30340;&#34892;&#25968;&#65292;&#29305;&#21035;&#26159;&#22312;&#22788;&#29702;&#22823;&#37327;&#25968;&#25454;&#26102;&#12290;<\/p><p>&#22312;&#23376;&#26597;&#35810;&#20013;&#36991;&#20813;&#20351;&#29992;SELECT *&#65292;&#21482;&#36873;&#25321;&#20320;&#38656;&#35201;&#30340;&#21015;&#12290;<\/p><p>&#35831;&#27491;&#30830;&#32034;&#24341;&#25968;&#25454;&#24211;&#21015;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>&#23376;&#26597;&#35810;&#20026;&#20351;&#29992;Doctrine&#26816;&#32034;&#25968;&#25454;&#25552;&#20379;&#20102;&#24378;&#22823;&#30340;&#32500;&#24230;&#12290;&#36890;&#36807;&#23558;&#22797;&#26434;&#30340;&#25968;&#25454;&#24211;&#25805;&#20316;&#25277;&#35937;&#20026;&#21487;&#31649;&#29702;&#30340;DQL&#25805;&#20316;&#65292;Doctrine&#20801;&#35768;&#24320;&#21457;&#20154;&#21592;&#22312;PHP&#24212;&#29992;&#31243;&#24207;&#20869;&#20445;&#25345;&#28165;&#26224;&#12289;&#39640;&#25928;&#21644;&#20248;&#38597;&#30340;&#25968;&#25454;&#24211;&#35775;&#38382;&#12290;&#25552;&#20379;&#30340;&#31034;&#20363;&#23637;&#31034;&#20102;&#24744;&#25317;&#26377;&#30340;&#24191;&#27867;&#21151;&#33021;&#12290;&#23454;&#39564;&#19981;&#21516;&#30340;&#23376;&#26597;&#35810;&#24418;&#24335;&#20197;&#26377;&#25928;&#22320;&#23454;&#29616;&#24744;&#30340;&#24212;&#29992;&#31243;&#24207;&#25152;&#38656;&#30340;&#23450;&#21046;&#25968;&#25454;&#26816;&#32034;&#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>&#23376;&#26597;&#35810;&#26159;SQL&#26597;&#35810;&#30340;&#19968;&#31181;&#29305;&#27530;&#24418;&#24335;&#65292;&#23427;&#20801;&#35768;&#20320;&#22312;&#21478;&#19968;&#20010;&#26597;&#35810;&#32467;&#26524;&#20043;&#22806;&#25191;&#34892;&#21478;&#19968;&#32452;&#26597;&#35810;&#65288;&#31216;&#20026;&#23376;&#26597;&#35810;&#65289;&#12290;&#22312;Doctrine&#26694;&#26550;&#20013;&#65292;&#23376;&#26597;&#35810;&#21487;&#20197;&#29992;&#20110;&#25191;&#34892;&#22797;&#26434;&#30340;&#36923;&#36753;&#36816;&#31639;&#21644;&#32452;&#21512;&#26597;&#35810;&#12290;<\/p>\n<h3>&#23376;&#26597;&#35810;&#30340;&#22522;&#26412;&#27010;&#24565;<\/h3>\n<p>&#23376;&#26597;&#35810;&#36890;&#24120;&#19982;<code>LEFT JOIN<\/code>&#25110;<code>INNER JOIN<\/code>&#25805;&#20316;&#32467;&#21512;&#20351;&#29992;&#65292;&#20197;&#20415;&#26681;&#25454;&#23376;&#26597;&#35810;&#30340;&#32467;&#26524;&#26469;&#31579;&#36873;&#20027;&#34920;&#20013;&#30340;&#25968;&#25454;&#12290;&#20363;&#22914;&#65306;<\/p>\n<pre><code class=\"language-php\">$em = $this-&gt;getDoctrine()-&gt;getManager();\n$users = $em-&gt;getRepository('UserEntityUser')-&gt;createQueryBuilder('u')\n    -&gt;select('u', 'r')\n    -&gt;leftJoin('u.roles', 'r')\n    -&gt;where('u.id = :id')\n    -&gt;setParameter('id', 1)\n    -&gt;getQuery()\n    -&gt;getArrayResult();\n\nforeach ($users as $user) {\n    \/\/ &#22312;&#36825;&#37324;&#22788;&#29702;&#29992;&#25143;&#20449;&#24687;...\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#39318;&#20808;&#21019;&#24314;&#20102;&#19968;&#20010;<code>User<\/code>&#23454;&#20307;&#30340;&#26597;&#35810;&#65292;&#28982;&#21518;&#36890;&#36807;<code>JOIN<\/code>&#25805;&#20316;&#23558;<code>roles<\/code>&#20851;&#32852;&#21040;<code>User<\/code>&#23545;&#35937;&#19978;&#12290;&#26368;&#21518;&#65292;&#25105;&#20204;&#20351;&#29992;<code>WHERE<\/code>&#35821;&#21477;&#36807;&#28388;&#20986;&#29305;&#23450;ID&#30340;&#29992;&#25143;&#65292;&#24182;&#33719;&#21462;&#25152;&#26377;&#36825;&#20123;&#29992;&#25143;&#30340;&#35814;&#32454;&#20449;&#24687;&#12290;<\/p>\n<h3>&#23376;&#26597;&#35810;&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21517;&#20026;<code>Product<\/code>&#30340;&#23454;&#20307;&#31867;&#65292;&#20854;&#20013;&#21253;&#21547;&#20102;<code>Category<\/code>&#23454;&#20307;&#31867;&#30340;&#24341;&#29992;&#12290;&#25105;&#20204;&#21487;&#20197;&#20351;&#29992;&#23376;&#26597;&#35810;&#26469;&#26597;&#25214;&#25152;&#26377;&#23646;&#20110;&#29305;&#23450;&#20998;&#31867;&#30340;&#20135;&#21697;&#12290;<\/p>\n<pre><code class=\"language-php\">$productRepository = $this-&gt;getDoctrine()-&gt;getRepository(Product::class);\n$category = new Category();\n$category-&gt;setName(\"Electronics\");\n\n\/\/ &#20351;&#29992;&#23376;&#26597;&#35810;&#20174;Category&#20013;&#33719;&#21462;&#25152;&#26377;&#20135;&#21697;\n$products = $productRepository-&gt;findByCategories([$category]);\n\nforeach ($products as $product) {\n    echo \"Name: {$product-&gt;getName()}n\";\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#39318;&#20808;&#21019;&#24314;&#20102;&#19968;&#20010;<code>Product<\/code>&#23454;&#20307;&#30340;&#26597;&#35810;&#65292;&#28982;&#21518;&#36890;&#36807;<code>JOIN<\/code>&#25805;&#20316;&#23558;<code>categories<\/code>&#20851;&#32852;&#21040;<code>Product<\/code>&#23545;&#35937;&#19978;&#12290;&#25509;&#19979;&#26469;&#65292;&#25105;&#20204;&#20351;&#29992;<code>findByCategories<\/code>&#26041;&#27861;&#26681;&#25454;&#25351;&#23450;&#30340;&#31867;&#21035;&#31579;&#36873;&#20135;&#21697;&#21015;&#34920;&#12290;<\/p>\n<h3>&#27880;&#24847;&#20107;&#39033;<\/h3>\n<ul>\n<li><strong>&#30830;&#20445;&#27491;&#30830;&#36830;&#25509;&#25968;&#25454;&#24211;<\/strong>&#65306;&#22312;&#35843;&#29992;&#20219;&#20309;ORM&#25805;&#20316;&#20043;&#21069;&#65292;&#35831;&#30830;&#20445;&#24050;&#32463;&#24314;&#31435;&#20102;&#27491;&#30830;&#30340;&#25968;&#25454;&#24211;&#36830;&#25509;&#12290;<\/li>\n<li><strong>&#27880;&#24847;&#24615;&#33021;&#38382;&#39064;<\/strong>&#65306;&#20351;&#29992;&#23376;&#26597;&#35810;&#26102;&#65292;&#22914;&#26524;&#23376;&#26597;&#35810;&#28041;&#21450;&#22823;&#37327;&#30340;&#25968;&#25454;&#65292;&#21487;&#33021;&#20250;&#23548;&#33268;&#24615;&#33021;&#38382;&#39064;&#12290;&#22312;&#36825;&#31181;&#24773;&#20917;&#19979;&#65292;&#32771;&#34385;&#20248;&#21270;&#26597;&#35810;&#32467;&#26500;&#25110;&#32773;&#20351;&#29992;&#32034;&#24341;&#26469;&#21152;&#36895;&#26597;&#35810;&#36807;&#31243;&#12290;<\/li>\n<\/ul>\n<p>&#24076;&#26395;&#36825;&#23545;&#20320;&#26377;&#25152;&#24110;&#21161;&#65281;&#22914;&#26524;&#20320;&#26377;&#26356;&#22810;&#20851;&#20110;Doctrine&#25110;&#20854;&#20182;&#25968;&#25454;&#24211;&#25216;&#26415;&#30340;&#38382;&#39064;&#65292;&#38543;&#26102;&#27426;&#36814;&#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; &#26631;&#39064;&#65306; Doctrine &#20013;&#30340;&#23376;&#26597;&#35810;&#65306;&#23454;&#29992;&#25351;&#21335; &#22312;&#25968;&#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-1104","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\/1104","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=1104"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1104"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1104"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}