{"id":1107,"date":"2025-06-12T13:05:55","date_gmt":"2025-06-12T05:05:55","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1107.html"},"modified":"2025-06-12T13:05:55","modified_gmt":"2025-06-12T05:05:55","slug":"%e5%a6%82%e4%bd%95%e6%9f%a5%e7%9c%8b%e7%94%b1-doctrine-%e7%94%9f%e6%88%90%e7%9a%84-sql-%e6%9f%a5%e8%af%a2","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1107.html","title":{"rendered":"\u5982\u4f55\u67e5\u770b\u7531 Doctrine \u751f\u6210\u7684 SQL \u67e5\u8be2"},"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>&#26597;&#30475;&#30001; Doctrine &#29983;&#25104;&#30340; SQL &#26597;&#35810;&#21487;&#20197;&#36890;&#36807;&#22810;&#31181;&#26041;&#24335;&#23454;&#29616;&#65292;&#20855;&#20307;&#21462;&#20915;&#20110;&#20320;&#20351;&#29992;&#30340; ORM&#65288;&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#65289;&#24037;&#20855;&#21644;&#37197;&#32622;&#12290;&#20197;&#19979;&#26159;&#19968;&#20123;&#24120;&#35265;&#30340;&#26041;&#27861;&#65306;<\/p>\n<h3>&#20351;&#29992; Symfony &#30340; Console &#39537;&#21160;&#31243;&#24207;<\/h3>\n<p>&#22914;&#26524;&#20320;&#20351;&#29992;&#30340;&#26159; Symfony &#26694;&#26550;&#65292;&#24182;&#19988;&#24050;&#32463;&#37197;&#32622;&#20102; Doctrine&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#21629;&#20196;&#34892;&#26469;&#26597;&#30475;&#26597;&#35810;&#12290;<\/p>\n<ol>\n<li>\n<p><strong>&#21551;&#21160; Symfony Console<\/strong>&#65306;<\/p>\n<pre><code class=\"language-bash\">php bin\/console doctrine:query:sql<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#25191;&#34892;&#26597;&#35810;<\/strong>&#65306;\n&#36825;&#23558;&#21015;&#20986;&#25152;&#26377;&#24403;&#21069;&#24212;&#29992;&#20013;&#30340;&#25968;&#25454;&#24211;&#26597;&#35810;&#12290;<\/p>\n<\/li>\n<\/ol>\n<h3>&#20351;&#29992; Doctrine &#25511;&#21046;&#21488;&#25193;&#23637;<\/h3>\n<p>Doctrine &#25552;&#20379;&#20102;&#19968;&#20010;&#25511;&#21046;&#21488;&#25193;&#23637;&#65292;&#21487;&#20197;&#35753;&#20320;&#26356;&#26041;&#20415;&#22320;&#26597;&#30475;&#26597;&#35810;&#12290;<\/p>\n<ol>\n<li>\n<p><strong>&#23433;&#35013;&#25193;&#23637;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-bash\">composer require symfony\/doctrine-orm-console<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#21551;&#29992;&#25193;&#23637;<\/strong>&#65306;\n&#22312; <code>config\/packages\/dev\/doctrine.yaml<\/code> &#20013;&#21551;&#29992;&#25193;&#23637;&#65306;<\/p>\n<pre><code class=\"language-yaml\">doctrine:\n   orm:\n       metadata_driver:\n           default:\n               mappings:\n                   AppEntity: ~<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#36816;&#34892;&#26597;&#35810;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-bash\">php bin\/console doctrine:query:sql --entity=AppEntityYourEntity<\/code><\/pre>\n<\/li>\n<\/ol>\n<h3>&#20351;&#29992; PHP &#25163;&#21160;&#33719;&#21462; SQL &#26597;&#35810;<\/h3>\n<p>&#22914;&#26524;&#20320;&#38656;&#35201;&#22312;&#20195;&#30721;&#20013;&#25163;&#21160;&#33719;&#21462; SQL &#26597;&#35810;&#65292;&#21487;&#20197;&#20351;&#29992; Doctrine &#30340; <code>Query<\/code> &#23545;&#35937;&#12290;<\/p>\n<pre><code class=\"language-php\">use DoctrineORMEntityManagerInterface;\nuse DoctrineORMQuery;\n\n\/\/ &#20551;&#35774; $entityManager &#26159;&#20320;&#30340; EntityManager &#23454;&#20363;\n\n$queryBuilder = $entityManager-&gt;createQueryBuilder();\n$queryBuilder-&gt;select('e')\n             -&gt;from('AppEntityYourEntity', 'e');\n\n$sql = $queryBuilder-&gt;getQuery()-&gt;getSQL();\n\necho $sql;<\/code><\/pre>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20551;&#35774;&#20320;&#26377;&#19968;&#20010;&#31616;&#21333;&#30340;&#23454;&#20307;&#31867; <code>User<\/code>&#65292;&#24182;&#19988;&#20320;&#24819;&#26597;&#30475;&#23427;&#29983;&#25104;&#30340; SQL &#26597;&#35810;&#12290;<\/p>\n<pre><code class=\"language-php\">namespace AppEntity;\n\nuse DoctrineORMMapping as ORM;\n\n\/**\n * @ORMEntity\n *\/\nclass User\n{\n    \/**\n     * @ORMId\n     * @ORMGeneratedValue\n     * @ORMColumn(type=\"integer\")\n     *\/\n    private $id;\n\n    \/**\n     * @ORMColumn(type=\"string\", length=255)\n     *\/\n    private $username;\n\n    \/\/ Getters and Setters\n}<\/code><\/pre>\n<p>&#28982;&#21518;&#65292;&#20320;&#21487;&#20197;&#36825;&#26679;&#33719;&#21462;&#24182;&#25171;&#21360; SQL &#26597;&#35810;&#65306;<\/p>\n<pre><code class=\"language-php\">use DoctrineORMEntityManagerInterface;\nuse DoctrineORMQuery;\n\n\/\/ &#20551;&#35774; $entityManager &#26159;&#20320;&#30340; EntityManager &#23454;&#20363;\n\n$userRepository = $entityManager-&gt;getRepository(User::class);\n$queryBuilder = $userRepository-&gt;createQueryBuilder('u');\n$queryBuilder-&gt;select('u.username')\n             -&gt;where('u.id = :userId')\n             -&gt;setParameter('userId', 1);\n\n$sql = $queryBuilder-&gt;getQuery()-&gt;getSQL();\n\necho $sql;<\/code><\/pre>\n<p>&#36890;&#36807;&#36825;&#20123;&#26041;&#27861;&#65292;&#20320;&#21487;&#20197;&#26377;&#25928;&#22320;&#26597;&#30475;&#21644;&#35843;&#35797;&#30001; Doctrine &#29983;&#25104;&#30340; SQL &#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><h3>&#20171;&#32461;<\/h3><p>&#22312;&#20351;&#29992;Doctrine ORM&#19982;Symfony&#39033;&#30446;&#24037;&#20316;&#26102;&#65292;&#29702;&#35299;&#25191;&#34892;&#30340;&#25968;&#25454;&#24211;&#26597;&#35810;&#32972;&#21518;&#30340;SQL&#35821;&#21477;&#23545;&#20110;&#35843;&#35797;&#12289;&#20248;&#21270;&#20197;&#21450;&#30830;&#20445;&#24212;&#29992;&#31243;&#24207;&#20934;&#30830;&#24615;&#33267;&#20851;&#37325;&#35201;&#12290;&#22312;&#36825;&#31687;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#23558;&#25506;&#32034;&#20960;&#31181;&#26597;&#30475;&#36825;&#20123;&#26597;&#35810;&#30340;&#26041;&#27861;&#65292;&#24182;&#28145;&#20837;&#25506;&#35752;&#36825;&#19968;&#38656;&#27714;&#30340;&#21407;&#22240;&#12290;<\/p><h3>&#20026;&#20160;&#20040;&#38656;&#35201;&#30417;&#25511;SQL&#26597;&#35810;&#65311;<\/h3><p>Doctrine ORM &#25277;&#35937;&#20102;&#25968;&#25454;&#24211;&#23618;&#65292;&#20294;&#20102;&#35299;&#29983;&#25104;&#30340; SQL &#35821;&#21477;&#30340;&#30830;&#20999;&#32454;&#33410;&#26159;&#26377;&#24110;&#21161;&#30340;&#65306;<\/p><p>&#20934;&#22791;&#25968;&#25454;&#24211;&#36801;&#31227;&#21644;&#25193;&#23637;<\/p><p>&#27491;&#22312;&#23545;&#25968;&#25454;&#24211;&#37319;&#21462;&#21738;&#20123;&#34892;&#21160;&#65311;<\/p><p>&#20248;&#21270;&#24615;&#33021;&#65292;&#36890;&#36807;&#20998;&#26512;&#26597;&#35810;&#25928;&#29575;&#12290;<\/p><p>Debugging issues caused by the ORM&#8217;s abstraction.<\/p><h3>&#37197;&#32622;&#26085;&#24535;<\/h3><p>&#39318;&#20808;&#65292;&#35831;&#30830;&#20445;&#24050;&#21551;&#29992;SQL&#26085;&#24535;&#35760;&#24405;&#12290;&#22312;&#24744;&#30340;Symfony&#24212;&#29992;&#20013;&#65292;&#21487;&#20197;&#22312;&#37197;&#32622;&#25991;&#20214;&#20013;&#35774;&#32622;&#26085;&#24535;&#35760;&#24405;&#22120;&#12290;<code>config\/packages\/dev\/doctrine.yaml<\/code>&#35831;&#25552;&#20379;&#25991;&#20214;&#25110;&#30456;&#24212;&#30340;&#29615;&#22659;&#37197;&#32622;&#65306;<\/p><pre><code>doctrine:\n    dbal:\n        logging: true\n        profiling: '%kernel.debug%'\n<\/code><\/pre><p>&#36825;&#31181;&#35774;&#32622;&#30830;&#20445;&#22312;&#24744;&#30340;&#24320;&#21457;&#29615;&#22659;&#20013;&#65292;DBAL&#65288;&#25968;&#25454;&#24211;&#25277;&#35937;&#23618;&#65289;&#20250;&#35760;&#24405;&#24182;&#20998;&#26512;&#24744;&#30340;SQL&#26597;&#35810;&#12290;<\/p><h3>&#20351;&#29992;Web&#35843;&#35797;&#24037;&#20855;&#12290;<\/h3><p>Symfony&#33258;&#24102;&#20102;&#19968;&#20010;&#26377;&#29992;&#30340;Web&#35843;&#35797;&#24037;&#20855;&#26639;&#65292;&#23427;&#21487;&#20197;&#26174;&#31034;&#21508;&#31181;&#31867;&#22411;&#30340;&#20449;&#24687;&#65292;&#21253;&#25324;Doctrine&#29983;&#25104;&#30340;&#26597;&#35810;&#12290;&#35201;&#35775;&#38382;&#23427;&#65292;&#21482;&#38656;&#22312;&#24320;&#21457;&#29615;&#22659;&#20013;&#25171;&#24320;&#24212;&#29992;&#31243;&#24207;&#65292;&#35813;&#24037;&#20855;&#26639;&#25552;&#20379;&#20102;&#29983;&#25104;&#26597;&#35810;&#30340;&#23436;&#20840;&#35775;&#38382;&#26435;&#38480;&#65292;&#20351;&#24744;&#33021;&#22815;&#26597;&#30475;&#25191;&#34892;&#26102;&#38388;&#21644;&#20854;&#20182;&#26377;&#20215;&#20540;&#30340;&#25968;&#25454;&#12290;<\/p><h3>&#21551;&#29992;Doctrine&#26597;&#35810;&#26085;&#24535;<\/h3><p>&#22914;&#26524;&#20320;&#24076;&#26395;&#23558;SQL&#26597;&#35810;&#35760;&#24405;&#21040;&#25991;&#20214;&#65292;&#21487;&#20197;&#35774;&#32622;Doctrine SQL&#26085;&#24535;&#35760;&#24405;&#22120;&#12290;&#20197;&#19979;&#31034;&#20363;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312;Symfony&#20013;&#37197;&#32622;&#22522;&#26412;&#30340;&#26085;&#24535;&#35760;&#24405;&#22120;&#65306;<\/p><pre><code>use DoctrineDBALLoggingFileSQLLogger;\nuse DoctrineORMEntityManagerInterface;\n\npublic function logSqlQueries(EntityManagerInterface $em): void\n{\n    $doctrineConfiguration = $em-&gt;getConnection()-&gt;getConfiguration();\n    $logger = new FileSQLLogger('path\/to\/your\/sql.log');\n    $doctrineConfiguration-&gt;setSQLLogger($logger);\n}\n<\/code><\/pre><p>&#26377;&#20102;&#36825;&#20010;&#20195;&#30721;&#65292;SQL&#26597;&#35810;&#23558;&#20250;&#20889;&#20837;&#25351;&#23450;&#30340;&#26085;&#24535;&#25991;&#20214;&#20013;&#12290;<\/p><h3>&#20351;&#29992;Symfony Profiler&#26597;&#30475;&#26597;&#35810;<\/h3><p>Symfony &#24037;&#20855;&#25552;&#20379;&#35814;&#32454;&#30340;&#27934;&#23519;&#65292;&#21253;&#25324;&#25968;&#25454;&#24211;&#26597;&#35810;&#12290;&#23548;&#33322;&#21040;&#24615;&#33021;&#20998;&#26512;&#22120;&#65292;&#35831;&#35775;&#38382;&#12290;<code>\/_profiler<\/code>URL&#65292;&#20320;&#21487;&#20197;&#22312;&#36825;&#37324;&#25214;&#21040;&#27599;&#20010;&#35831;&#27714;&#30340;Doctrine&#26597;&#35810;&#35814;&#32454;&#25253;&#21578;&#12290;<\/p><h3>&#20351;&#29992;Doctrine&#30340;&#35843;&#35797;&#26632;&#35775;&#38382;&#26597;&#35810;<\/h3><p>Doctrine &#25552;&#20379;&#20102;&#19968;&#20010;&#35843;&#35797;&#26632;(Debug Stack) &#21487;&#20197;&#29992;&#26469;&#35760;&#24405;&#26597;&#35810;&#12290;&#20197;&#19979;&#31034;&#20363;&#23637;&#31034;&#20102;&#22914;&#20309;&#20351;&#29992;&#35843;&#35797;&#26632;&#26469;&#36319;&#36394;&#26597;&#35810;&#65306;<\/p><pre><code>use DoctrineDBALLoggingDebugStack;\nuse DoctrineORMEntityManagerInterface;\n\npublic function trackSqlWithDebugStack(EntityManagerInterface $em): void\n{\n    $debugStack = new DebugStack();\n    $em-&gt;getConnection()-&gt;getConfiguration()-&gt;setSQLLogger($debugStack);\n\n    \/\/ This is where you execute your queries\n\n    \/\/ Output the queries after they are executed\n    foreach ($debugStack-&gt;queries as $queryData) {\n        echo 'Query: ' . $queryData['sql'] . \"n\";\n        echo 'Params: ' . json_encode($queryData['params']) . \"n\";\n        echo 'Types: ' . json_encode($queryData['types']) . \"n\";\n        echo 'Execution Time: ' . $queryData['executionMS'] . \"msn\";\n    }\n}\n<\/code><\/pre><p>&#19978;&#36848;&#20195;&#30721;&#29255;&#27573;&#21019;&#24314;&#20102;&#19968;&#20010;&#35843;&#35797;&#22534;&#26632;&#65292;&#37197;&#32622;&#20102;&#23427;&#65292;&#24182;&#38543;&#21518;&#36755;&#20986;&#25191;&#34892;&#30340;SQL&#26597;&#35810;&#21450;&#20854;&#21442;&#25968;&#21644;&#26102;&#38388;&#25139;&#12290;<\/p><h3>&#20351;&#29992;Doctrine Console&#21629;&#20196;<\/h3><p>Doctrine&#36824;&#25552;&#20379;&#20102;&#21629;&#20196;&#34892;&#24037;&#20855;&#65292;&#29992;&#20110;&#26597;&#30475;&#26597;&#35810;&#35821;&#21477;&#12290;&#36890;&#36807;&#36816;&#34892;&#20197;&#19979;&#21629;&#20196;&#65292;&#21487;&#20197;&#36755;&#20986;Doctrine&#30340;DQL&#35821;&#21477;&#65306;<\/p><pre><code>php bin\/console doctrine:query:dql 'SELECT u FROM AppEntityUser u'\n<\/code><\/pre><p>&#36825;&#26159;&#25171;&#21360;&#20986;DQL&#21629;&#20196;&#23545;&#24212;SQL&#35821;&#27861;&#30340;&#12290;<\/p><h3>&#20351;&#29992;&#22270;&#24418;&#24037;&#20855;&#36827;&#34892;&#21487;&#35270;&#21270;&#34920;&#31034;<\/h3><p>&#38500;&#20102;&#35752;&#35770;&#30340;&#26041;&#27861;&#20043;&#22806;&#65292;&#24320;&#21457;&#20154;&#21592;&#36890;&#24120;&#20542;&#21521;&#20110;&#20351;&#29992;&#20855;&#26377;&#24615;&#33021;&#20998;&#26512;&#21151;&#33021;&#30340;SQL&#23458;&#25143;&#31471;&#65292;&#20363;&#22914;phpMyAdmin&#29992;&#20110;MySQL&#65292;&#25110;DataGrip&#29992;&#20110;&#21508;&#31181;&#25968;&#25454;&#24211;&#65292;&#36825;&#20123;&#24037;&#20855;&#21487;&#20197;&#21487;&#35270;&#21270;&#26597;&#35810;&#27963;&#21160;&#12290;<\/p><h3>&#32467;&#35770;&#12290;<\/h3><p>&#30417;&#25511;&#21644;&#29702;&#35299;Doctrine&#29983;&#25104;&#30340;SQL&#23545;&#20110;&#35843;&#35797;&#12289;&#20248;&#21270;&#20197;&#21450;&#32500;&#25252;&#36879;&#26126;&#30340;&#25968;&#25454;&#23618;&#20132;&#20114;&#33267;&#20851;&#37325;&#35201;&#12290;&#35752;&#35770;&#20013;&#30340;&#27599;&#20010;&#26041;&#27861;&#37117;&#26681;&#25454;&#20855;&#20307;&#24773;&#20917;&#25552;&#20379;&#20102;&#19981;&#21516;&#30340;&#35814;&#32454;&#31243;&#24230;&#21644;&#36866;&#29992;&#24615;&#12290;&#26681;&#25454;&#38656;&#35201;&#65292;&#24212;&#29992;&#36825;&#20123;&#26041;&#27861;&#20197;&#33719;&#24471;&#24555;&#36895;&#27983;&#35272;Symfony&#24037;&#20855;&#26639;&#19978;&#30340;&#35270;&#22270;&#65292;&#33719;&#21462;&#35814;&#32454;&#30340;&#26085;&#24535;&#35760;&#24405;&#65292;&#25110;&#32773;&#20351;&#29992;&#24378;&#22823;&#30340;SQL&#23458;&#25143;&#31471;&#36827;&#34892;&#35814;&#23613;&#30340;&#24615;&#33021;&#20998;&#26512;&#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>&#35201;&#26597;&#30475;Doctrine &#29983;&#25104;&#30340;SQL&#26597;&#35810;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;ORM&#65288;&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#65289;&#21151;&#33021;&#12290;&#20197;&#19979;&#26159;&#22914;&#20309;&#20570;&#21040;&#36825;&#19968;&#28857;&#30340;&#19968;&#33324;&#27493;&#39588;&#65306;<\/p>\n<ol>\n<li>\n<p>&#39318;&#20808;&#30830;&#20445;&#24050;&#32463;&#23433;&#35013;&#20102;Doctrine ORM&#12290;&#22914;&#26524;&#27809;&#26377;&#23433;&#35013;&#65292;&#35831;&#21442;&#32771;<a href=\"https:\/\/www.zhaozhao123.cn\/skin\/go?url=aHR0cHM6Ly93d3cuZG9jdHJpbmUtcHJvamVjdC5vcmcvcHJvamVjdHMvZG9jdHJpbmUtb3JtL2VuL2xhdGVzdC9xdWlja3N0YXJ0L2luc3RhbGxhdGlvbi5odG1s\" rel=\"noopener noreferrer nofollow\">&#23448;&#26041;&#25991;&#26723;<\/a>&#26469;&#23433;&#35013;&#12290;<\/p>\n<\/li>\n<li>\n<p>&#20351;&#29992;PHP&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#23454;&#20307;&#31867;&#25110;&#32773;&#32487;&#25215;&#29616;&#26377;&#31867;&#65292;&#24182;&#30830;&#20445;&#23427;&#23454;&#29616;&#20102;<code>DoctrineORMMappingClassMetadataInfo<\/code>&#25509;&#21475;&#12290;&#20363;&#22914;&#65306;<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"language-php\">&lt;?php\n\nuse DoctrineORMMapping as ORM;\n\n\/**\n * @ORMEntity(repositoryClass=\"MyRepository\")\n *\/\nclass User\n{\n    \/**\n     * @ORMId()\n     * @ORMGeneratedValue()\n     * @ORMColumn(type=\"integer\")\n     *\/\n    private $id;\n\n    \/\/ &#30465;&#30053;&#20854;&#20182;&#23646;&#24615;&#21644;&#26041;&#27861;\n}<\/code><\/pre>\n<ol start=\"3\">\n<li>&#22312;&#24212;&#29992;&#30340;&#37197;&#32622;&#25991;&#20214;&#65288;&#36890;&#24120;&#26159;<code>config\/config.xml<\/code>&#65289;&#20013;&#21551;&#29992;ORM&#21151;&#33021;&#65306;<\/li>\n<\/ol>\n<pre><code class=\"language-xml\">&lt;doctrine&gt;\n    &lt;mapping type=\"annotation\"&gt;\n        &lt;driver&gt;pdo_mysql&lt;\/driver&gt;\n        &lt;databaseConnection&gt;\n            &lt;host&gt;localhost&lt;\/host&gt;\n            &lt;username&gt;your_username&lt;\/username&gt;\n            &lt;password&gt;your_password&lt;\/password&gt;\n            &lt;dbname&gt;your_database_name&lt;\/dbname&gt;\n        &lt;\/databaseConnection&gt;\n        &lt;entityMapper&gt;\n            &lt;alias&gt;EntityMapper&lt;\/alias&gt;\n            &lt;type&gt;AnnotationMapper&lt;\/type&gt;\n            &lt;properties&gt;\n                &lt;property&gt;\n                    &lt;name&gt;orm.entity_manager&lt;\/name&gt;\n                    &lt;value&gt;doctrine.orm.default_entity_manager&lt;\/value&gt;\n                &lt;\/property&gt;\n            &lt;\/properties&gt;\n        &lt;\/entityMapper&gt;\n    &lt;\/mapping&gt;\n&lt;\/doctrine&gt;<\/code><\/pre>\n<ol start=\"4\">\n<li>&#29616;&#22312;&#21487;&#20197;&#20351;&#29992;ORM&#25552;&#20379;&#30340;<code>getSql()<\/code>&#26041;&#27861;&#33719;&#21462;SQL&#26597;&#35810;&#12290;&#20294;&#26159;&#65292;&#36825;&#20010;&#26041;&#27861;&#36820;&#22238;&#30340;&#26159;&#21407;&#22987;SQL&#35821;&#21477;&#65292;&#19981;&#21253;&#25324;&#20219;&#20309;&#21442;&#25968;&#12290;&#22914;&#26524;&#20320;&#38656;&#35201;&#28155;&#21152;&#21442;&#25968;&#65292;&#20320;&#38656;&#35201;&#25163;&#21160;&#35843;&#29992;<code>addParameter($parameters)<\/code>&#26041;&#27861;&#12290;&#20363;&#22914;&#65306;<\/li>\n<\/ol>\n<pre><code class=\"language-php\">$entityManager = $this-&gt;getDoctrine()-&gt;getManager();\n$repository = $entityManager-&gt;getRepository(User::class);\n\n$user = $repository-&gt;findOneBy(array('email' =&gt; 'test@example.com'));\n\nif ($user) {\n    $sql = $entityManager-&gt;getConnection()-&gt;createQueryBuilder();\n    $sql-&gt;select('*')\n         -&gt;from('User', 'u')\n         -&gt;where(\"u.email = :email\")\n         -&gt;setParameter(':email', $user-&gt;getEmail())\n         -&gt;getQuery();\n\n    echo $sql-&gt;getDQL();\n}<\/code><\/pre>\n<ol start=\"5\">\n<li>&#22914;&#26524;&#20320;&#24819;&#23558;&#32467;&#26524;&#38598;&#36716;&#25442;&#20026;&#25968;&#32452;&#25110;&#20854;&#20182;&#25968;&#25454;&#32467;&#26500;&#65292;&#21487;&#20197;&#20351;&#29992;<code>$result<\/code>&#21464;&#37327;&#65292;&#28982;&#21518;&#20351;&#29992;<code>foreach<\/code>&#24490;&#29615;&#36941;&#21382;&#32467;&#26524;&#24182;&#25171;&#21360;&#27599;&#20010;&#34892;&#65306;<\/li>\n<\/ol>\n<pre><code class=\"language-php\">$result = $entityManager-&gt;getConnection()-&gt;createQueryBuilder()\n             -&gt;select('*')\n             -&gt;from('User', 'u')\n             -&gt;where(\"u.email = :email\")\n             -&gt;setParameter(':email', $user-&gt;getEmail())\n             -&gt;execute();\n\nforeach ($result as $row) {\n    echo \"ID: {$row['id']}, Email: {$row['email']}&lt;br&gt;\";\n}\n\n\/\/ &#36755;&#20986;&#65306;\n\/\/ ID: 1, Email: test@example.com&lt;br&gt;\n\/\/ ID: 2, Email: test2@example.com&lt;br&gt;<\/code><\/pre>\n<ol start=\"6\">\n<li>&#36825;&#23601;&#26159;&#22914;&#20309;&#36890;&#36807;ORM&#26597;&#35810;&#30340;&#26041;&#27861;&#26469;&#33719;&#21462;&#30001;Doctrine&#29983;&#25104;&#30340;SQL&#26597;&#35810;&#12290;&#36825;&#36890;&#24120;&#29992;&#20110;&#39564;&#35777;&#25968;&#25454;&#24211;&#25805;&#20316;&#26159;&#21542;&#27491;&#30830;&#25191;&#34892;&#65292;&#20063;&#21487;&#20197;&#29992;&#26469;&#35843;&#35797;&#21644;&#35786;&#26029;&#38382;&#39064;&#12290;<\/li>\n<\/ol>\n<p>&#27880;&#24847;&#65306;&#20197;&#19978;&#20195;&#30721;&#26159;&#22522;&#20110;Phalcon&#26694;&#26550;&#30340;&#65292;&#22914;&#26524;&#20320;&#20351;&#29992;&#30340;&#26159;&#19981;&#21516;&#30340;&#26694;&#26550;&#65292;&#23454;&#29616;&#26041;&#24335;&#21487;&#33021;&#20250;&#26377;&#25152;&#19981;&#21516;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#26597;&#30475;&#30001; Doctrine &#29983;&#25104;&#30340; SQL &#26597;&#35810;&#21487;&#20197;&#36890;&#36807;&#22810;&#31181;&#038;#260..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1107","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\/1107","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=1107"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1107"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1107"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1107"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}