{"id":1102,"date":"2025-06-12T12:59:17","date_gmt":"2025-06-12T04:59:17","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1102.html"},"modified":"2025-06-12T12:59:17","modified_gmt":"2025-06-12T04:59:17","slug":"doctrine%e6%9f%a5%e8%af%a2%e7%94%9f%e6%88%90%e5%99%a8%ef%bc%9a%e5%ae%9e%e6%88%98%e6%8c%87%e5%8d%97","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1102.html","title":{"rendered":"Doctrine\u67e5\u8be2\u751f\u6210\u5668\uff1a\u5b9e\u6218\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>&#12298; Doctrine &#26597;&#35810;&#29983;&#25104;&#22120;&#65306;&#23454;&#25112;&#25351;&#21335;&#12299;&#26159;&#19968;&#26412;&#20840;&#38754;&#30340;&#20070;&#31821;&#65292;&#26088;&#22312;&#24110;&#21161;&#24320;&#21457;&#32773;&#29702;&#35299;&#24182;&#20351;&#29992; Doctrine ORM &#26469;&#26500;&#24314;&#25968;&#25454;&#24211;&#26597;&#35810;&#12290;&#20197;&#19979;&#26159;&#23545;&#36825;&#26412;&#20070;&#30340;&#19968;&#20123;&#20851;&#38190;&#28857;&#21644;&#19968;&#20123;&#31034;&#20363;&#20195;&#30721;&#65306;<\/p>\n<h3>1. &#24341;&#35328;<\/h3>\n<ul>\n<li><strong>&#20160;&#20040;&#26159; Doctrine&#65311;<\/strong> Doctrine &#26159;&#19968;&#20010;&#29992;&#20110; PHP &#30340;&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#65288;ORM&#65289;&#26694;&#26550;&#65292;&#23427;&#20801;&#35768;&#24320;&#21457;&#32773;&#23558;&#25968;&#25454;&#27169;&#22411;&#19982;&#25968;&#25454;&#24211;&#34920;&#36827;&#34892;&#26144;&#23556;&#12290;<\/li>\n<li><strong>&#20026;&#20160;&#20040;&#36873;&#25321; Doctrine&#65311;<\/strong> Doctrine &#25552;&#20379;&#20102;&#20016;&#23500;&#30340;&#21151;&#33021;&#65292;&#22914;&#23454;&#20307;&#31867;&#12289;&#20851;&#32852;&#26144;&#23556;&#12289;&#26597;&#35810;&#26500;&#24314;&#22120;&#31561;&#65292;&#20351;&#24471;&#24320;&#21457;&#25968;&#25454;&#24211;&#24212;&#29992;&#31243;&#24207;&#21464;&#24471;&#26356;&#21152;&#39640;&#25928;&#12290;<\/li>\n<\/ul>\n<h3>2. &#23433;&#35013; Doctrine<\/h3>\n<ul>\n<li><strong>&#23433;&#35013; Composer<\/strong>&#65306;&#39318;&#20808;&#65292;&#30830;&#20445;&#20320;&#24050;&#32463;&#23433;&#35013;&#20102; Composer&#65292;&#36825;&#26159;&#19968;&#20010;&#21253;&#31649;&#29702;&#24037;&#20855;&#65292;&#29992;&#20110;&#20381;&#36182;&#31649;&#29702;&#21644;&#39033;&#30446;&#21021;&#22987;&#21270;&#12290;<\/li>\n<li><strong>&#23433;&#35013; Doctrine<\/strong>&#65306;&#20351;&#29992; Composer &#23433;&#35013; Doctrine &#21644;&#20854;&#30456;&#20851;&#32452;&#20214;&#65306;\n<pre><code class=\"language-bash\">composer require doctrine\/orm<\/code><\/pre><\/li>\n<\/ul>\n<h3>3. &#21019;&#24314;&#23454;&#20307;&#31867;<\/h3>\n<ul>\n<li>\n<p><strong>&#23450;&#20041;&#23454;&#20307;&#31867;<\/strong>&#65306;&#21019;&#24314;&#19968;&#20010;&#34920;&#31034;&#25968;&#25454;&#24211;&#34920;&#30340;&#23454;&#20307;&#31867;&#12290;&#20363;&#22914;&#65292;&#20551;&#35774;&#26377;&#19968;&#20010; <code>User<\/code> &#34920;&#65292;&#21487;&#20197;&#36825;&#26679;&#23450;&#20041;&#23454;&#20307;&#31867;&#65306;<\/p>\n<pre><code class=\"language-php\">namespace 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 $username;\n\n  \/**\n   * @ORMColumn(type=\"string\", length=255)\n   *\/\n  private $email;\n\n  \/\/ Getters and Setters\n}<\/code><\/pre>\n<\/li>\n<\/ul>\n<h3>4. &#20351;&#29992;&#26597;&#35810;&#26500;&#24314;&#22120;<\/h3>\n<ul>\n<li>\n<p><strong>&#21019;&#24314;&#26597;&#35810;&#26500;&#24314;&#22120;<\/strong>&#65306;&#20351;&#29992; Doctrine &#25552;&#20379;&#30340;&#26597;&#35810;&#26500;&#24314;&#22120;&#26469;&#26500;&#24314;&#22797;&#26434;&#30340;&#26597;&#35810;&#12290;&#20363;&#22914;&#65292;&#33719;&#21462;&#25152;&#26377;&#29992;&#25143;&#65306;<\/p>\n<pre><code class=\"language-php\">use DoctrineORMEntityManagerInterface;\nuse DoctrineORMQueryBuilder;\n\npublic function getUsers(EntityManagerInterface $entityManager)\n{\n  $queryBuilder = $entityManager-&gt;createQueryBuilder();\n  $queryBuilder-&gt;select('u')\n               -&gt;from(User::class, 'u');\n  return $queryBuilder-&gt;getQuery()-&gt;getResult();\n}<\/code><\/pre>\n<\/li>\n<\/ul>\n<h3>5. &#22788;&#29702;&#26465;&#20214;<\/h3>\n<ul>\n<li><strong>&#28155;&#21152;&#26465;&#20214;<\/strong>&#65306;&#21487;&#20197;&#22312;&#26597;&#35810;&#26500;&#24314;&#22120;&#20013;&#28155;&#21152;&#21508;&#31181;&#26465;&#20214;&#65292;&#20363;&#22914;&#36807;&#28388;&#29992;&#25143;&#21517;&#25110;&#25490;&#24207;&#32467;&#26524;&#12290;&#20363;&#22914;&#65292;&#25353;&#29992;&#25143;&#21517;&#21319;&#24207;&#25490;&#24207;&#65306;\n<pre><code class=\"language-php\">$queryBuilder-&gt;orderBy('u.username', 'ASC');<\/code><\/pre><\/li>\n<\/ul>\n<h3>6. &#20351;&#29992;&#23376;&#26597;&#35810;<\/h3>\n<ul>\n<li>\n<p><strong>&#20351;&#29992;&#23376;&#26597;&#35810;<\/strong>&#65306;&#22312;&#26597;&#35810;&#26500;&#24314;&#22120;&#20013;&#20351;&#29992;&#23376;&#26597;&#35810;&#26469;&#23454;&#29616;&#26356;&#22797;&#26434;&#30340;&#25968;&#25454;&#22788;&#29702;&#12290;&#20363;&#22914;&#65292;&#26597;&#25214;&#24180;&#40836;&#22823;&#20110; 20 &#23681;&#30340;&#29992;&#25143;&#65306;<\/p>\n<pre><code class=\"language-php\">$subQuery = $entityManager-&gt;createQueryBuilder();\n$subQuery-&gt;select('u.id')\n         -&gt;where('u.age &gt; :age')\n         -&gt;setParameter('age', 20);\n\n$queryBuilder-&gt;addSelect('s.id AS subId')\n           -&gt;from(SubEntity::class, 's')\n           -&gt;join($subQuery, 'u.subEntity', 'u.subEntityId = s.id');<\/code><\/pre>\n<\/li>\n<\/ul>\n<h3>7. &#24635;&#32467;<\/h3>\n<p>&#12298; Doctrine &#26597;&#35810;&#29983;&#25104;&#22120;&#65306;&#23454;&#25112;&#25351;&#21335;&#12299;&#26159;&#19968;&#26412;&#38750;&#24120;&#23454;&#29992;&#30340;&#20070;&#31821;&#65292;&#36866;&#21512;&#24076;&#26395;&#28145;&#20837;&#29702;&#35299; Doctrine ORM &#30340;&#24320;&#21457;&#32773;&#12290;&#36890;&#36807;&#38405;&#35835;&#26412;&#20070;&#65292;&#20320;&#21487;&#20197;&#23398;&#20064;&#22914;&#20309;&#20351;&#29992;&#26597;&#35810;&#26500;&#24314;&#22120;&#26469;&#26500;&#24314;&#22797;&#26434;&#30340;&#25968;&#25454;&#24211;&#26597;&#35810;&#65292;&#24182;&#19988;&#25484;&#25569;&#22914;&#20309;&#22788;&#29702;&#21508;&#31181;&#26465;&#20214;&#21644;&#23376;&#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>&#27010;&#35272;<\/h2><p>&#23545;&#20110;&#20351;&#29992;PHP&#24320;&#21457;&#24212;&#29992;&#30340;&#24320;&#21457;&#32773;&#65292;&#29305;&#21035;&#26159;&#37027;&#20123;&#38656;&#35201;&#22788;&#29702;&#22797;&#26434;&#26597;&#35810;&#35201;&#27714;&#30340;&#24212;&#29992;&#31243;&#24207;&#65292;Doctrine&#39033;&#30446;&#25552;&#20379;&#20102;&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#22120;&#65288;ORM&#65289;&#65292;&#36825;&#26159;&#19968;&#31181;&#21160;&#24577;&#19988;&#21487;&#32500;&#25252;&#30340;&#25968;&#25454;&#24211;&#20132;&#20114;&#24037;&#20855;&#12290;Doctrine ORM&#30340;&#26680;&#24515;&#32452;&#20214;&#20043;&#19968;&#26159;&#20854;QueryBuilder&#65292;&#36825;&#26159;&#19968;&#20010;&#24378;&#22823;&#30340;&#24037;&#20855;&#65292;&#29992;&#20110;&#22312;&#32534;&#31243;&#21644;&#24179;&#21488;&#26080;&#20851;&#30340;&#26041;&#24335;&#19979;&#26500;&#24314;&#21644;&#25191;&#34892;&#25968;&#25454;&#24211;&#26597;&#35810;&#12290;&#26412;&#25351;&#21335;&#23558;&#24102;&#20320;&#19968;&#27493;&#27493;&#22320;&#20102;&#35299;&#22914;&#20309;&#22312;&#23454;&#38469;&#37096;&#32626;&#20013;&#20351;&#29992;QueryBuilder&#65292;&#24110;&#21161;&#20320;&#20248;&#21270;&#25968;&#25454;&#24211;&#20132;&#20114;&#20197;&#25552;&#39640;&#25928;&#29575;&#21644;&#21487;&#35835;&#24615;&#12290;<\/p><h3>&#29702;&#35299;QueryBuilder<\/h3><p>&#22312;&#26680;&#24515;&#65292;QueryBuilder&#26159;&#19968;&#31181;&#23545;&#35937;&#21270;&#30340;&#26041;&#27861;&#26469;&#26500;&#24314;SQL&#26597;&#35810;&#12290;&#19981;&#21516;&#20110;&#21407;&#22987;&#30340;SQL&#65292;QueryBuilder&#25277;&#35937;&#20102;&#25968;&#25454;&#24211;&#25805;&#20316;&#36807;&#31243;&#65292;&#20351;&#24320;&#21457;&#20154;&#21592;&#33021;&#22815;&#20351;&#29992;PHP&#26041;&#27861;&#21644;&#23545;&#35937;&#21019;&#24314;&#26597;&#35810;&#12290;&#36825;&#24847;&#21619;&#30528;&#20320;&#21487;&#20197;&#19968;&#27425;&#32534;&#20889;&#25968;&#25454;&#24211;&#20195;&#30721;&#65292;&#22312;&#25903;&#25345;&#30340;&#25152;&#26377;&#25968;&#25454;&#24211;&#24179;&#21488;&#19978;&#36816;&#34892;&#12290;<\/p><h3>&#35774;&#32622;&#29615;&#22659;<\/h3><p>&#22312;&#24320;&#22987;&#20043;&#21069;&#65292;&#35831;&#30830;&#20445;&#24744;&#30340;&#24320;&#21457;&#29615;&#22659;&#24050;&#32463;&#20934;&#22791;&#23601;&#32490;&#12290;&#24744;&#38656;&#35201;&#26377;&#19968;&#20010;&#36816;&#34892;&#33391;&#22909;&#30340;PHP&#35774;&#32622;&#65292;&#21253;&#25324;Composer&#21644;Doctrine ORM&#24050;&#23433;&#35013;&#12290;&#24744;&#21487;&#20197;&#20351;&#29992;Composer&#26469;&#23433;&#35013;Doctrine&#65306;<\/p><pre><code>composer require doctrine\/orm<\/code><\/pre><h2>&#19982;QueryBuilder&#24037;&#20316;<\/h2><p>&#22312;&#26412;&#33410;&#20013;&#65292;&#25105;&#20204;&#23558;&#25506;&#35752;&#22914;&#20309;&#20351;&#29992;QueryBuilder&#25191;&#34892;&#24120;&#35265;&#30340;&#25968;&#25454;&#24211;&#25805;&#20316;&#12290;<\/p><h3>&#36873;&#25321;&#25968;&#25454;<\/h3><p>&#35201;&#24320;&#22987;&#26500;&#24314;&#19968;&#20010;&#31579;&#36873;&#26597;&#35810;&#65292;&#20320;&#38656;&#35201;&#36890;&#36807;EntityManager&#33719;&#21462;QueryBuilder&#23454;&#20363;&#65306;<\/p><pre><code>$queryBuilder = $entityManager-&gt;createQueryBuilder();<\/code><\/pre><p>&#35753;&#25105;&#20204;&#20174; User &#23454;&#20307;&#20013;&#36873;&#25321;&#25152;&#26377;&#35760;&#24405;&#65306;<\/p><pre><code>$queryBuilder\n    -&gt;select('u')\n    -&gt;from('User', 'u');\n$query = $queryBuilder-&gt;getQuery();\n$results = $query-&gt;getResult();<\/code><\/pre><h3>&#36807;&#28388;&#32467;&#26524;<\/h3><p>&#28155;&#21152;&#26465;&#20214;&#38750;&#24120;&#31616;&#21333;&#65292;&#20351;&#29992; &#8216;where&#8217; &#26041;&#27861;&#21363;&#21487;&#12290;&#22914;&#26524;&#20320;&#24819;&#36890;&#36807; ID &#26597;&#25214;&#29992;&#25143;&#65306;<\/p><pre><code>$queryBuilder\n    -&gt;select('u')\n    -&gt;from('User', 'u')\n    -&gt;where('u.id = :id')\n    -&gt;setParameter('id', $userId);\n$query = $queryBuilder-&gt;getQuery();\n$user = $query-&gt;getSingleResult();<\/code><\/pre><h3>&#21512;&#24182;&#34920;&#26684;<\/h3><p>&#20851;&#32852;&#25968;&#25454;&#26159;&#24120;&#35265;&#30340;&#38656;&#27714;&#65292;QueryBuilder&#20351;&#20854;&#21464;&#24471;&#31616;&#21333;&#65306;<\/p><pre><code>$queryBuilder\n    -&gt;select('u', 'p')\n    -&gt;from('User', 'u')\n    -&gt;leftJoin('u.posts', 'p');\n$query = $queryBuilder-&gt;getQuery();\n$usersWithPosts = $query-&gt;getResult();<\/code><\/pre><h3>&#20998;&#31867;&#21644;&#38480;&#21046;<\/h3><p>&#22312;&#29616;&#20195;Web&#24212;&#29992;&#31243;&#24207;&#20013;&#65292;&#25490;&#24207;&#21644;&#38480;&#21046;&#32467;&#26524;&#32463;&#24120;&#20986;&#29616;&#65292;&#23588;&#20854;&#26159;&#22312;&#20998;&#39029;&#26174;&#31034;&#25968;&#25454;&#26102;&#65306;<\/p><pre><code>$queryBuilder\n    -&gt;select('u')\n    -&gt;from('User', 'u')\n    -&gt;orderBy('u.username', 'ASC')\n    -&gt;setMaxResults(10);\n$query = $queryBuilder-&gt;getQuery();\n$topUsers = $query-&gt;getResult();<\/code><\/pre><h2>&#32858;&#21512;&#21644;&#20998;&#32452;&#25805;&#20316;<\/h2><p>&#25968;&#25454;&#32858;&#21512;&#21487;&#20197;&#36890;&#36807;QueryBuilder&#20869;&#32622;&#30340;&#26041;&#27861;&#26469;&#23454;&#29616;&#65306;<\/p><pre><code>$queryBuilder\n    -&gt;select('COUNT(u.id)')\n    -&gt;from('User', 'u')\n    -&gt;groupBy('u.country');\n$query = $queryBuilder-&gt;getQuery();\n$userCountsByCountry = $query-&gt;getScalarResult();<\/code><\/pre><h2>&#21160;&#24577;&#26597;&#35810;&#21644;&#21442;&#25968;<\/h2><p>&#26500;&#24314;&#21160;&#24577;&#26597;&#35810;&mdash;&mdash;&#22312;&#36816;&#34892;&#26102;&#25165;&#30693;&#36947;&#23454;&#38469;&#30340;&#26597;&#35810;&#26465;&#20214;&#30340;&#22320;&#26041;&#65292;QueryBuilder&#34920;&#29616;&#24471;&#23588;&#20026;&#20986;&#33394;&#65306;<\/p><pre><code>\/\/... Assume $criteria is an associative array of field =&gt; value\nforeach ($criteria as $field =&gt; $value) {\n    $queryBuilder-&gt;andWhere(sprintf('u.%s = :%s', $field, $field))\n        -&gt;setParameter($field, $value);\n}\n\/\/...<\/code><\/pre><h2>&#25209;&#37327;&#22788;&#29702;<\/h2><p>&#23545;&#20110;&#22788;&#29702;&#22823;&#37327;&#25968;&#25454;&#30340;&#24212;&#29992;&#31243;&#24207;&#65292;&#25209;&#37327;&#22788;&#29702;&#21487;&#20197;&#36991;&#20813;&#22312;&#25805;&#20316;&#22823;&#37327;&#25968;&#25454;&#26102;&#21487;&#33021;&#20986;&#29616;&#30340;&#20869;&#23384;&#38382;&#39064;&#65306;<\/p><pre><code>$queryBuilder\n    -&gt;select('u')\n    -&gt;from('User', 'u')\n    -&gt;where('u.lastLogin &lt; :lastYear')\n    -&gt;setParameter('lastYear', new 'DateTime'('-1 year'));\n$iterableResult = $queryBuilder-&gt;getQuery()-&gt;iterate();\nforeach ($iterableResult as $row) {\n    $user = reset($row);\n    \/\/ Process $user\n    $entityManager-&gt;detach($user);\n}<\/code><\/pre><h2>&#19982;&#20854;&#20182;Doctrine&#21151;&#33021;&#30340;&#38598;&#25104;<\/h2><p>&#26597;&#35810;&#26500;&#24314;&#22120;&#65288;QueryBuilder&#65289;&#21487;&#20197;&#19982;Doctrine&#30340;&#20854;&#20182;&#32452;&#20214;&#32039;&#23494;&#32806;&#21512;&#65292;&#22914;DQL&#65288;Doctrine &#26597;&#35810;&#35821;&#35328;&#65289;&#21644;Repository&#27169;&#24335;&#65292;&#20174;&#32780;&#23454;&#29616;&#32467;&#26500;&#21270;&#21644;&#26356;&#26131;&#20110;&#32500;&#25252;&#30340;&#20195;&#30721;&#65306;<\/p><p>&#35831;&#27880;&#24847;&#65292;&#26412;&#25351;&#21335;&#19981;&#28085;&#30422;&#39640;&#32423;&#20027;&#39064;&#22914;&#20351;&#29992; DQL &#21644; Repositories&#65292;&#20294;&#24744;&#21487;&#20197;&#36890;&#36807;Doctrine &#25991;&#26723;&#20102;&#35299;&#26356;&#22810;&#35814;&#24773;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>Doctrine&#30340;QueryBuilder&#25552;&#20379;&#20102;&#26500;&#24314;&#25968;&#25454;&#24211;&#26597;&#35810;&#30340;&#24378;&#22823;&#12289;&#28789;&#27963;&#19988;&#21487;&#35835;&#30340;&#35299;&#20915;&#26041;&#26696;&#12290;&#36890;&#36807;&#25484;&#25569;QueryBuilder&#65292;&#24744;&#23558;&#33021;&#22815;&#21019;&#24314;&#21160;&#24577;&#12289;&#21487;&#32500;&#25252;&#21644;&#24179;&#21488;&#26080;&#20851;&#30340;PHP&#24212;&#29992;&#31243;&#24207;&#65292;&#36825;&#20123;&#24212;&#29992;&#21487;&#20197;&#20248;&#38597;&#39640;&#25928;&#22320;&#22788;&#29702;&#29616;&#23454;&#19990;&#30028;&#30340;&#25968;&#25454;&#25805;&#20316;&#38656;&#27714;&#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><strong>&#26631;&#39064;<\/strong>: &#12298;&#20174;&#23454;&#25112;&#20986;&#21457;&#65306;&#20351;&#29992; Doctrine &#26597;&#35810;&#29983;&#25104;&#22120;&#12299;<\/p>\n<p><strong>&#27491;&#25991;:<\/strong><\/p>\n<p>&#22312;&#36827;&#34892;&#22823;&#35268;&#27169;&#30340;&#25968;&#25454;&#24211;&#25805;&#20316;&#26102;&#65292;&#36873;&#25321;&#21512;&#36866;&#30340;&#26597;&#35810;&#29983;&#25104;&#22120;&#33267;&#20851;&#37325;&#35201;&#12290;doctrine &#25552;&#20379;&#20102;&#19968;&#31995;&#21015;&#24378;&#22823;&#30340;&#24037;&#20855;&#26469;&#31616;&#21270;&#36825;&#19968;&#36807;&#31243;&#12290;&#26412;&#25991;&#23558;&#24102;&#20320;&#28145;&#20837;&#29702;&#35299;&#22914;&#20309;&#21033;&#29992; Doctrine &#30340;&#26597;&#35810;&#29983;&#25104;&#22120;&#26469;&#26500;&#24314;&#39640;&#25928;&#19988;&#26131;&#20110;&#32500;&#25252;&#30340; SQL &#35821;&#21477;&#12290;<\/p>\n<h3>1. &#23433;&#35013; Doctrine ORM<\/h3>\n<p>&#39318;&#20808;&#65292;&#30830;&#20445;&#20320;&#30340;&#39033;&#30446;&#24050;&#23433;&#35013;&#20102; Doctrine ORM&#12290;&#22914;&#26524;&#27809;&#26377;&#65292;&#35831;&#25353;&#29031;&#23448;&#26041;&#25991;&#26723;<a href=\"https:\/\/www.zhaozhao123.cn\/skin\/go?url=aHR0cHM6Ly93d3cuZG9jdHJpbmUtcHJvamVjdC5vcmcvcHJvamVjdHMvZG9jdHJpbmUtb3JtL2VuLzIuOC9nZXR0aW5nLXN0YXJ0ZWQvaW5zdGFsbGF0aW9uLmh0bWw=\" rel=\"noopener noreferrer nofollow\">&#36825;&#37324;<\/a>&#36827;&#34892;&#23433;&#35013;&#12290;<\/p>\n<h3>2. &#20351;&#29992; Doctrine ORM &#26500;&#24314;&#22522;&#26412;&#26597;&#35810;<\/h3>\n<h4>&#21019;&#24314;&#23454;&#20307;&#31867;<\/h4>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21517;&#20026; <code>User<\/code> &#30340;&#29992;&#25143;&#34920;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppEntity;\n\nuse DoctrineORMMapping as ORM;\nuse SymfonyComponentValidatorConstraints as Assert;\n\n\/**\n * @ORMEntity(repositoryClass=\"AppRepositoryUserRepository\")\n *\/\nclass User\n{\n    \/**\n     * @ORMId()\n     * @ORMGeneratedValue()\n     * @ORMColumn(type=\"integer\")\n     *\/\n    private $id;\n\n    \/**\n     * @ORMColumn(type=\"string\", length=50)\n     * @AssertNotBlank(message=\"Username cannot be blank.\")\n     *\/\n    private $username;\n\n    \/\/ ... &#20854;&#20182;&#23383;&#27573;&#21644;&#26041;&#27861; ...\n\n}<\/code><\/pre>\n<h4>&#22522;&#26412;&#26597;&#35810;&#31034;&#20363;<\/h4>\n<p>&#20026;&#20102;&#23637;&#31034;&#22914;&#20309;&#21019;&#24314;&#19968;&#20010;&#31616;&#21333;&#30340;&#26597;&#35810;&#65292;&#25105;&#20204;&#21487;&#20197;&#26597;&#35810;&#25152;&#26377;&#29992;&#25143;&#21517;&#20026; &#8220;John&#8221; &#30340;&#29992;&#25143;&#65306;<\/p>\n<pre><code class=\"language-php\">$em = $this-&gt;getDoctrine()-&gt;getManager();\n\n$query = $em-&gt;createQuery('SELECT u FROM AppEntityUser u WHERE u.username = :username')\n    -&gt;setParameter('username', 'John');\n\n$user = $query-&gt;getOneOrNullResult();\nif ($user) {\n    echo \"Found user with username: {$user-&gt;getUsername()}n\";\n} else {\n    echo \"No users found with username: Johnn\";\n}<\/code><\/pre>\n<h3>3. &#20351;&#29992; Doctrine ORM &#26500;&#24314;&#22797;&#26434;&#26597;&#35810;<\/h3>\n<p>&#29616;&#22312;&#35753;&#25105;&#20204;&#21019;&#24314;&#19968;&#20010;&#26356;&#22797;&#26434;&#30340;&#26597;&#35810;&#65292;&#20363;&#22914;&#26597;&#35810;&#25152;&#26377;&#29992;&#25143;&#21517;&#21644;&#37038;&#31665;&#22320;&#22336;&#37117;&#21253;&#21547; &#8220;john&#8221; &#30340;&#29992;&#25143;&#65306;<\/p>\n<pre><code class=\"language-php\">$users = $em-&gt;createQueryBuilder()\n    -&gt;select('u')\n    -&gt;from(User::class, 'u')\n    -&gt;where(\n        $em-&gt;createExpression('u.username LIKE :search')\n            -&gt;setValue('%john%')\n            -&gt;bind(':search')\n    )\n    -&gt;orWhere(\n        $em-&gt;createExpression('u.email LIKE :search')\n            -&gt;setValue('%john@domain.com%')\n            -&gt;bind(':search')\n    );\n\n$results = $users-&gt;getQuery()-&gt;getResult();\n\nforeach ($results as $result) {\n    echo \"Username: {$result-&gt;getUsername()}, Email: {$result-&gt;getEmail()}n\";\n}<\/code><\/pre>\n<h3>4. &#23454;&#25112;&#24212;&#29992;&#19982;&#27880;&#24847;&#20107;&#39033;<\/h3>\n<ul>\n<li><strong>&#21442;&#25968;&#32465;&#23450;:<\/strong> &#20351;&#29992; <code>$em-&gt;createExpression()<\/code> &#21644; <code>-&gt;bind()<\/code> &#26041;&#27861;&#26469;&#21160;&#24577;&#22320;&#32465;&#23450;&#26597;&#35810;&#26465;&#20214;&#12290;<\/li>\n<li><strong>&#20248;&#21270;&#26597;&#35810;&#24615;&#33021;:<\/strong> &#23613;&#37327;&#36991;&#20813;&#20351;&#29992;&#24490;&#29615;&#26465;&#20214;&#65292;&#22240;&#20026;&#36825;&#20250;&#22686;&#21152;&#26597;&#35810;&#30340;&#22797;&#26434;&#24230;&#21644;&#25191;&#34892;&#26102;&#38388;&#12290;<\/li>\n<li><strong>&#38169;&#35823;&#22788;&#29702;:<\/strong> &#22312;&#26597;&#35810;&#32467;&#26524;&#20013;&#28155;&#21152;&#24322;&#24120;&#22788;&#29702;&#65292;&#20197;&#38450;&#27490;&#22240;&#38169;&#35823;&#25968;&#25454;&#23548;&#33268;&#30340;&#31243;&#24207;&#23849;&#28291;&#12290;<\/li>\n<\/ul>\n<p>&#36890;&#36807;&#20197;&#19978;&#27493;&#39588;&#65292;&#20320;&#21487;&#20197;&#24320;&#22987;&#20351;&#29992; Doctrine ORM &#30340;&#26597;&#35810;&#29983;&#25104;&#22120;&#26469;&#32534;&#20889;&#39640;&#25928;&#12289;&#26131;&#35835;&#30340; SQL &#35821;&#21477;&#12290;&#38543;&#30528;&#39033;&#30446;&#30340;&#22686;&#38271;&#21644;&#38656;&#27714;&#30340;&#21464;&#21270;&#65292;&#21487;&#20197;&#28789;&#27963;&#35843;&#25972;&#26597;&#35810;&#32467;&#26500;&#21644;&#21442;&#25968;&#65292;&#20197;&#28385;&#36275;&#19981;&#21516;&#22330;&#26223;&#19979;&#30340;&#38656;&#27714;&#12290;&#24076;&#26395;&#36825;&#31687;&#25991;&#31456;&#33021;&#24110;&#21161;&#20320;&#22312;&#26085;&#24120;&#24037;&#20316;&#20013;&#26356;&#21152;&#29087;&#32451;&#22320;&#36816;&#29992; Doctrine ORM&#65292;&#25552;&#39640;&#24320;&#21457;&#25928;&#29575;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#12298; Doctrine &#26597;&#35810;&#29983;&#25104;&#22120;&#65306;&#23454;&#25112;&#25351;&#21335;&#12299;&#26159;&#19968;&#26412;&#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-1102","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\/1102","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=1102"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1102"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1102"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}