{"id":1141,"date":"2025-06-12T14:05:04","date_gmt":"2025-06-12T06:05:04","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1141.html"},"modified":"2025-06-12T14:05:04","modified_gmt":"2025-06-12T06:05:04","slug":"php-doctrine-%e9%80%89%e6%8b%a9%e6%9f%90%e5%88%97%e4%b8%banull%e6%88%96%e4%b8%8d%e4%b8%banull%e7%9a%84%e8%a1%8c","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1141.html","title":{"rendered":"PHP Doctrine: \u9009\u62e9\u67d0\u5217\u4e3aNULL\u6216\u4e0d\u4e3aNULL\u7684\u884c"},"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; PHP &#20013;&#20351;&#29992; Doctrine ORM&#65288;Object-Relational Mapping&#65289;&#26469;&#22788;&#29702;&#25968;&#25454;&#24211;&#26597;&#35810;&#26102;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#35774;&#32622;&#26597;&#35810;&#26465;&#20214;&#26469;&#31579;&#36873;&#20986; <code>NULL<\/code> &#25110;&#19981;&#20026; <code>NULL<\/code> &#30340;&#21015;&#12290;&#20197;&#19979;&#26159;&#19968;&#20010;&#31034;&#20363;&#20195;&#30721;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#20351;&#29992; Doctrine &#26597;&#35810;&#22120;&#26469;&#23454;&#29616;&#36825;&#19968;&#28857;&#65306;<\/p>\n<pre><code class=\"language-php\">use DoctrineORMEntityManager;\nuse DoctrineORMQueryBuilder;\n\n\/\/ &#20551;&#35774;&#20320;&#24050;&#32463;&#37197;&#32622;&#22909;&#20102; EntityManager &#21644;&#23454;&#20307;&#31867;\n\n$entityManager = EntityManager::create($connectionParams, $config);\n\n\/\/ &#21019;&#24314;&#19968;&#20010; QueryBuilder &#23545;&#35937;\n$queryBuilder = $entityManager-&gt;createQueryBuilder();\n\n\/\/ &#35774;&#32622;&#34920;&#21517;&#21644;&#20027;&#38190;&#23383;&#27573;\n$tableName = 'your_table_name';\n$primaryKeyField = 'id';\n\n\/\/ &#23450;&#20041;&#26597;&#35810;&#26465;&#20214;\n$queryBuilder-&gt;select('e')\n             -&gt;from($tableName, 'e');\n\n\/\/ &#28155;&#21152;&#36807;&#28388;&#26465;&#20214;&#65306;&#31579;&#36873;&#20986; NULL &#25110;&#19981;&#20026; NULL &#30340;&#21015;\n$queryBuilder-&gt;where($queryBuilder-&gt;expr()-&gt;eq('e.' . $primaryKeyField, ':id'));\n\n\/\/ &#20351;&#29992;&#21442;&#25968;&#32465;&#23450;&#26469;&#38450;&#27490; SQL &#27880;&#20837;\n$id = 1; \/\/ &#26367;&#25442;&#20026;&#20320;&#23454;&#38469;&#30340; ID &#20540;\n$queryBuilder-&gt;setParameter(':id', $id);\n\n\/\/ &#25191;&#34892;&#26597;&#35810;&#24182;&#33719;&#21462;&#32467;&#26524;\n$results = $queryBuilder-&gt;getQuery()-&gt;getResult();\n\n\/\/ &#36755;&#20986;&#32467;&#26524;\nforeach ($results as $result) {\n    echo $result-&gt;$primaryKeyField . \"n\";\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#31034;&#20363;&#20013;&#65292;&#25105;&#20204;&#39318;&#20808;&#21019;&#24314;&#20102;&#19968;&#20010; <code>QueryBuilder<\/code> &#23545;&#35937;&#65292;&#24182;&#35774;&#32622;&#20102;&#34920;&#21517;&#21644;&#20027;&#38190;&#23383;&#27573;&#12290;&#28982;&#21518;&#65292;&#25105;&#20204;&#28155;&#21152;&#20102;&#36807;&#28388;&#26465;&#20214;&#65292;&#20351;&#29992; <code>expr()-&gt;eq<\/code> &#26041;&#27861;&#26469;&#26816;&#26597;&#21015;&#26159;&#21542;&#31561;&#20110;&#25351;&#23450;&#30340;&#20540;&#12290;&#26368;&#21518;&#65292;&#25105;&#20204;&#25191;&#34892;&#26597;&#35810;&#24182;&#33719;&#21462;&#32467;&#26524;&#12290;<\/p>\n<p>&#35831;&#27880;&#24847;&#65292;&#36825;&#20010;&#31034;&#20363;&#20551;&#35774;&#20320;&#24050;&#32463;&#26377;&#19968;&#20010;&#21517;&#20026; <code>your_table_name<\/code> &#30340;&#34920;&#65292;&#24182;&#19988;&#35813;&#34920;&#26377;&#19968;&#20010;&#21517;&#20026; <code>id<\/code> &#30340;&#20027;&#38190;&#23383;&#27573;&#12290;&#20320;&#38656;&#35201;&#26681;&#25454;&#23454;&#38469;&#24773;&#20917;&#35843;&#25972;&#34920;&#21517;&#21644;&#23383;&#27573;&#21517;&#12290;<\/p>\n<p>&#22914;&#26524;&#20320;&#38656;&#35201;&#26356;&#22797;&#26434;&#30340;&#26597;&#35810;&#26465;&#20214;&#65292;&#21487;&#20197;&#21442;&#32771; Doctrine &#30340;&#23448;&#26041;&#25991;&#26723;&#26469;&#23398;&#20064;&#26356;&#22810;&#20851;&#20110;&#26500;&#24314;&#26597;&#35810;&#30340;&#26041;&#27861;&#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>&#36873;&#25321;&#20855;&#26377;&#29305;&#23450;&#26465;&#20214;&#30340;&#25968;&#25454;&#36890;&#24120;&#26159;&#22312;&#20219;&#20309;ORM&#65288;&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#65289;&#20013;&#30340;&#24120;&#35265;&#25805;&#20316;&#65292;&#20063;&#26159;&#19982;&#25968;&#25454;&#24211;&#22312;&#24212;&#29992;&#31243;&#24207;&#20013;&#20132;&#20114;&#30340;&#24517;&#35201;&#37096;&#20998;&#12290;Doctrine &#26159;&#19968;&#20010;&#24378;&#22823;&#30340;PHP ORM&#65292;&#31616;&#21270;&#20102;&#25968;&#25454;&#24211;&#20132;&#20114;&#12290;&#32463;&#24120;&#34987;&#38382;&#21040;&#30340;&#25805;&#20316;&#20043;&#19968;&#28041;&#21450;&#26681;&#25454;&#21015;&#20540;&#26159;&#21542;&#28385;&#36275;&#26576;&#31181;&#26465;&#20214;&#26469;&#36873;&#25321;&#34892;&#12290;<code>NULL<\/code>&#21734;&#65292;&#23545;&#20102;&#12290;<code>NOT NULL<\/code>&#22312;&#26412;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#23558;&#25506;&#35752;&#22914;&#20309;&#20351;&#29992;Doctrine&#30340;QueryBuilder&#21644;DQL&#65288;Doctrine&#26597;&#35810;&#35821;&#35328;&#65289;&#26469;&#23454;&#29616;&#36825;&#19968;&#28857;&#12290;<\/p><h2>&#22312;&#25968;&#25454;&#24211;&#20013;&#29702;&#35299;NULL&#20540;&#26159;&#38750;&#24120;&#37325;&#35201;&#30340;&#12290;<\/h2><p>&#22312;&#28145;&#20837;&#25506;&#35752;&#25945;&#20041;&#20043;&#21069;&#65292;&#29702;&#35299;&#20854;&#20855;&#20307;&#20869;&#23481;&#38750;&#24120;&#37325;&#35201;&#12290;<code>NULL<\/code>&#22312;&#25968;&#25454;&#24211;&#19978;&#19979;&#25991;&#20013;&#34920;&#31034;&#12290;<code>NULL<\/code>&#36825;&#26159;&#19968;&#20010;&#32570;&#22833;&#25110;&#19981;&#36866;&#29992;&#30340;&#20449;&#24687;&#26631;&#35760;&#31526;&#12290;&#36825;&#20010;&#20540;&#19981;&#20250;&#34987;&#35270;&#20026;&ldquo;&#38646;&rdquo;&#65292;&#20063;&#19981;&#20250;&#34987;&#35270;&#20026;&#31354;&#23383;&#31526;&#20018;&#12290;&#30456;&#21453;&#65292;&#23427;&#26159;&#19968;&#20010;&#34920;&#31034;&#21015;&#30340;&#20540;&#26410;&#35774;&#32622;&#30340;&#26174;&#33879;&#26631;&#24535;&#12290;<\/p><p>&#39318;&#20808;&#65292;&#24744;&#38656;&#35201;&#22312;PHP&#39033;&#30446;&#20013;&#23433;&#35013;&#24182;&#37197;&#32622;Doctrine&#12290;&#30830;&#20445;&#24744;&#30340;&#23454;&#20307;&#21644;&#26144;&#23556;&#27491;&#30830;&#35774;&#32622;&#65292;&#22240;&#20026;&#23427;&#20204;&#23450;&#20041;&#20102;&#25105;&#20204;&#23558;&#26597;&#35810;&#30340;&#32467;&#26500;&#12290;<\/p><h2>&#20351;&#29992;QueryBuilder&#36873;&#25321;&#21015;&#20540;&#20026;NULL&#30340;&#34892;<\/h2><p>Doctrine&#30340;<code>QueryBuilder<\/code>&#25552;&#20379;&#20102;&#19968;&#31181;&#27969;&#21033;&#30340;&#25509;&#21475;&#26469;&#26500;&#24314;SQL&#26597;&#35810;&#35821;&#21477;&#12290;&#35201;&#36873;&#25321;&#19968;&#20010;&#21015;&#20013;&#30340;&#34892;&#65292;&#21487;&#20197;&#20351;&#29992;&#20197;&#19979;&#35821;&#27861;&#65306;SELECT * FROM &#34920;&#21517; WHERE &#21015;&#21517; = &#8216;&#20540;&#8217;&#12290;&#20363;&#22914;&#65292;&#22914;&#26524;&#20320;&#24819;&#20174;&#21517;&#20026;&#8217;sales&#8217;&#30340;&#34920;&#20013;&#36873;&#25321;&#25152;&#26377;&#38144;&#21806;&#39069;&#22823;&#20110;1000&#30340;&#35760;&#24405;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;&#20197;&#19979;SQL&#35821;&#21477;&#65306;\nSELECT * FROM sales WHERE amount &gt; 1000;\n&#35831;&#26681;&#25454;&#20320;&#30340;&#20855;&#20307;&#38656;&#27714;&#35843;&#25972;&#34920;&#21517;&#12289;&#21015;&#21517;&#21644;&#26465;&#20214;&#34920;&#36798;&#24335;&#12290;<code>NULL<\/code>&#35831;&#20351;&#29992;&#12290;<code>isNull()<\/code>&#26041;&#27861;&#12290;<\/p><pre><code>$entityManager = ...; \/\/ Get your EntityManager instance\n$queryBuilder = $entityManager-&gt;createQueryBuilder();\n\n$queryBuilder\n-&gt;select('entity')\n-&gt;from('YourBundle:Entity', 'entity')\n-&gt;where('entity.columnName is NULL');\n\n$query = $queryBuilder-&gt;getQuery();\n$result = $query-&gt;getResult();\n<\/code><\/pre><p>&#22312;&#19978;&#36848;&#20363;&#23376;&#20013;&#65292;&#26367;&#25442;<code>'YourBundle:Entity'<\/code>&#20197;&#24744;&#23454;&#20307;&#30340;&#21629;&#21517;&#31354;&#38388;&#21644;&#21517;&#31216;&#20026;&#20934;&#12290;<code>'entity.columnName'<\/code>&#23545;&#20110;&#24744;&#35201;&#26816;&#26597;&#30340;&#23454;&#38469;&#36130;&#20135;&#65292;&#24744;&#24076;&#26395;&#36827;&#34892;&#20160;&#20040;&#25805;&#20316;&#65311;<code>NULL<\/code>&#22909;&#30340;&#65292;&#35831;&#25552;&#20379;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<\/p><h2>&#20351;&#29992;QueryBuilder&#36873;&#25321;&#38750;&#31354;&#21015;&#30340;&#34892;<\/h2><p>&#31867;&#20284;&#20110;<code>isNull()<\/code>&#26041;&#27861;&#65292;QueryBuilder &#25552;&#20379;&#20102;<code>isNotNull()<\/code>&#26041;&#27861;&#24212;&#23545;&#30456;&#21453;&#22330;&#26223;&mdash;&mdash;&#36873;&#25321;&#19968;&#20010;&#21015;&#30340;&#34892;<code>NOT NULL<\/code>&#22909;&#30340;&#65292;&#35831;&#25552;&#20379;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<\/p><pre><code>$queryBuilder\n-&gt;select('entity')\n-&gt;from('YourBundle:Entity', 'entity')\n-&gt;where('entity.columnName is NOT NULL');\n\n$query = $queryBuilder-&gt;getQuery();\n$result = $query-&gt;getResult();\n<\/code><\/pre><p>&#20877;&#27425;&#30830;&#35748;&#65292;&#35831;&#30830;&#20445;&#24744;&#26367;&#25442;&#30340;&#26159;&#30456;&#20851;&#20869;&#23481;&#12290;<code>'YourBundle:Entity'<\/code>and&#20063;&#26159;&#65292;&#19968;&#20999;&#39034;&#21033;&#21527;&#65311;<code>'entity.columnName'<\/code>&#35831;&#25552;&#20379;&#38656;&#35201;&#32763;&#35793;&#30340;&#20855;&#20307;&#20869;&#23481;&#25110;&#20449;&#24687;&#12290;<\/p><h2>&#20351;&#29992;Doctrine&#26597;&#35810;&#35821;&#35328;&#65288;DQL&#65289;&#36827;&#34892;NULL&#26816;&#26597;<\/h2><p>&#25968;&#25454;&#23545;&#35937;&#26597;&#35810;&#35821;&#35328;&#65288;Doctrine Query Language&#65289;&#26159;&#19968;&#31181;&#22522;&#20110;SQL&#30340;&#39640;&#23618;&#27425;&#25277;&#35937;&#65292;&#26088;&#22312;&#19982;&#23545;&#35937;&#31649;&#29702;&#30456;&#20851;&#12290;&#34429;&#28982;&#19982;SQL&#38750;&#24120;&#30456;&#20284;&#65292;&#20294;&#23427;&#20351;&#29992;Doctrine&#23454;&#20307;&#32780;&#19981;&#26159;&#34920;&#21517;&#26469;&#24037;&#20316;&#12290;&#20197;&#19979;&#26159;&#26681;&#25454;DQL&#35821;&#21477;&#36873;&#25321;&#22522;&#20110;&#26576;&#20123;&#26465;&#20214;&#30340;&#34892;&#30340;&#26041;&#27861;&#65306;<code>NULL<\/code>&#21734;&#12290;<code>NOT NULL<\/code>: &#22909;&#30340;&#65292;&#35831;&#21457;&#36865;&#20320;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<\/p><pre><code>$entityManager = ...; \/\/ Entity Manager instance\n\n\/\/ For NULL\n$dql = \"SELECT e FROM YourBundle:Entity e WHERE e.columnName IS NULL\";\n$query = $entityManager-&gt;createQuery($dql);\n$result = $query-&gt;getResult();\n\n\/\/ For NOT NULL\n$dql = \"SELECT e FROM YourBundle:Entity e WHERE e.columnName IS NOT NULL\";\n$query = $entityManager-&gt;createQuery($dql);\n$result = $query-&gt;getResult();\n<\/code><\/pre><p>&#35831;&#30830;&#20445;&#24744;&#26367;&#25442;<code>YourBundle:Entity<\/code>&#25353;&#29031;&#36866;&#24403;&#30340;&#23454;&#20307;&#21629;&#21517;&#31354;&#38388;&#21644;&#21517;&#31216;&#36827;&#34892;&#22788;&#29702;&#12290;<code>e.columnName<\/code>&#20197;&#21487;&#33021;&#30340;&#36130;&#20135;&#21517;&#31216;&#20026;<code>NULL<\/code>&#21734;&#65292;&#26159;&#30340;&#12290;<code>NOT NULL<\/code>&#24050;&#32463;&#25910;&#21040;&#25351;&#20196;&#65292;&#35831;&#25552;&#20379;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<\/p><h2>&#20351;&#29992;Criteria API<\/h2><p>&#22914;&#26524;&#20320;&#22312;&#22788;&#29702;&#20179;&#24211;&#65292;Doctrine&#30340;Criteria API &#25552;&#20379;&#20102;&#21478;&#19968;&#31181;&#36827;&#34892;&#36873;&#25321;&#30340;&#26041;&#24335;&#65292;&#29305;&#21035;&#26159;&#22312;&#26500;&#24314;&#22797;&#26434;&#30340;&#26597;&#35810;&#26102;&#38750;&#24120;&#26377;&#29992;&#12290;&#36825;&#37324;&#26377;&#19968;&#20010;&#31034;&#20363;&#26469;&#25191;&#34892;&#19968;&#20010;&#22797;&#26434;&#26597;&#35810;&#12290;<code>NULL<\/code>&#22909;&#30340;&#65292;&#35831;&#25552;&#20379;&#26356;&#22810;&#20449;&#24687;&#65292;&#25105;&#26469;&#24110;&#20320;&#26816;&#26597;&#12290;<\/p><pre><code>use DoctrineCommonCollectionsCriteria;\n\n$repository = $entityManager-&gt;getRepository('YourBundle:Entity');\n$criteria = Criteria::create()-&gt;where(Criteria::expr()-&gt;isNull('columnName'));\n\n$matching = $repository-&gt;matching($criteria);\n<\/code><\/pre><p>&#20026;&#20102;&#21019;&#24314;&#19968;&#20010;<code>NOT NULL<\/code>&#29366;&#24577;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;&#30340;&#29366;&#24577;&#65292;&#20320;&#20250;&#29992;&#29366;&#24577;&#12290;<code>neq()<\/code>&#26041;&#27861;&#21644;&#20256;&#36882;&#21442;&#25968;<code>null<\/code>&#20316;&#20026;&#31532;&#20108;&#20010;&#21442;&#25968;&#12290;<\/p><pre><code>$criteria = Criteria::create()-&gt;where(Criteria::expr()-&gt;neq('columnName', null));\n$matching = $repository-&gt;matching($criteria);\n<\/code><\/pre><h2>&#39640;&#32423;&#32771;&#34385;<\/h2><p>&#22312;&#21019;&#24314;&#21253;&#21547;NULL&#26816;&#26597;&#30340;&#26597;&#35810;&#26102;&#65292;&#38656;&#35201;&#27880;&#24847;&#24615;&#33021;&#38382;&#39064;&#65292;&#29305;&#21035;&#26159;&#23545;&#20110;&#22823;&#22411;&#25968;&#25454;&#38598;&#12290;&#30830;&#20445;&#24744;&#30340;&#25968;&#25454;&#24211;&#21015;&#34987;&#36866;&#24403;&#32034;&#24341;&#65292;&#23588;&#20854;&#26159;&#24403;&#23427;&#20204;&#32463;&#24120;&#21442;&#19982;&#26597;&#35810;&#25805;&#20316;&#26102;&#12290;<code>NULL<\/code>&#22909;&#30340;&#65292;&#35831;&#25552;&#20379;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<code>NOT NULL<\/code>&#26597;&#35810;&#12290;&#35831;&#35760;&#20303;&#65292;Doctrine &#40664;&#35748;&#20250;&#23558;&#32467;&#26524;&#22635;&#20805;&#21040;&#23454;&#20307;&#20013;&#65292;&#36825;&#21487;&#33021;&#20250;&#24341;&#20837;&#39069;&#22806;&#30340;&#24320;&#38144;&#12290;&#22914;&#26524;&#20320;&#27491;&#22312;&#36873;&#25321;&#22823;&#37327;&#25968;&#25454;&#19988;&#19981;&#38656;&#35201;&#23436;&#25972;&#30340;&#23454;&#20307;&#65292;&#35831;&#32771;&#34385;&#20351;&#29992;&#37096;&#20998;&#23545;&#35937;&#25110;&#26631;&#37327;&#20197;&#25552;&#39640;&#24615;&#33021;&#12290;<\/p><p>&#35753;&#25105;&#20204;&#20551;&#35774;&#20320;&#26377;&#19968;&#20010;&#23454;&#20307;&#12290;<code>User<\/code>&#24182;&#19988;&#20320;&#24819;&#36873;&#25321;&#26576;&#20010;&#21015;&#65288;&#20363;&#22914;&#65289;&#30340;&#29992;&#25143;&#12290;<code>lastLogin<\/code>is null.<\/p><pre><code>use DoctrineORMEntityRepository;\n\nclass UserRepository extends EntityRepository\n{\n    public function findUsersWithNoLastLogin()\n    {\n        $queryBuilder = $this-&gt;createQueryBuilder('u')\n            -&gt;where('u.lastLogin IS NULL')\n            \/\/ Consider using partial objects if you don't need the full entity\n            -&gt;select('partial u.{id, name}')\n            \/\/ Or, select only specific scalar fields\n            \/\/ -&gt;select('u.id', 'u.name')\n            -&gt;getQuery();\n\n        return $queryBuilder-&gt;getResult();\n    }\n}\n<\/code><\/pre><p>&#35201;&#28857;&#65306;<\/p><p>&#26597;&#35810;&#25191;&#34892;&#65306;&#35813;&#26597;&#35810;&#36890;&#36807;&#25191;&#34892;&#23436;&#25104;&#12290;<code>getResult()<\/code>&#35813;&#26041;&#27861;&#36820;&#22238;&#26681;&#25454;&#25351;&#23450;&#23383;&#27573;&#30340;&#32467;&#26524;&#38598;&#12290;<\/p><p>&#32034;&#24341;&#65306;&#30830;&#20445;&#22312;NULL&#26816;&#26597;&#28041;&#21450;&#30340;&#21015;&#19978;&#21019;&#24314;&#32034;&#24341;&#12290;<code>lastLogin<\/code>&#22312;&#36825;&#31181;&#24773;&#20917;&#19979;&#65292;&#22914;&#26524;&#25968;&#25454;&#34987;&#27491;&#30830;&#32034;&#24341;&#65292;&#23588;&#20854;&#26159;&#24403;&#23427;&#32463;&#24120;&#20986;&#29616;&#22312;&#26597;&#35810;&#20013;&#26102;&#65292;&#36825;&#31181;&#24773;&#20917;&#20250;&#24471;&#21040;&#26356;&#22909;&#30340;&#22788;&#29702;&#12290;<\/p><p>&#26631;&#37327;&#22330;&#65306;&#25110;&#32773;&#65292;&#20320;&#21487;&#20197;&#36873;&#25321;&#21482;&#20351;&#29992;&#20320;&#38656;&#35201;&#30340;&#26631;&#37327;&#22330;&#12290;<code>u.id<\/code>&#22909;&#30340;&#65292;&#35831;&#21457;&#36865;&#20320;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<code>u.name<\/code>&#36825;&#31181;&#26041;&#27861;&#36991;&#20813;&#22312;&#19981;&#38656;&#35201;&#26102;&#23545;&#23436;&#25972;&#23454;&#20307;&#23545;&#35937;&#36827;&#34892; hydration&#12290;<\/p><p>&#37096;&#20998;&#23545;&#35937;&#65306;&#20026;&#20102;&#20943;&#23569;&#24320;&#38144;&#65292;&#20351;&#29992;&#20102;&#37096;&#20998;&#23545;&#35937;&#12290;<code>partial u.{id, name}<\/code>). &#36825;&#21482;&#33719;&#21462;&#20102;&#25351;&#23450;&#30340;&#23383;&#27573;&#12290;<\/p><p>&#26816;&#26597;&#65306;&#26597;&#35810;&#21253;&#25324;&#20102;&#12290;<code>WHERE<\/code>&#26465;&#27454;&#29992;&#20110;&#26816;&#26597;NULL&#20540;&#65288;&#25110;null&#65289;<code>u.lastLogin IS NULL<\/code>&#22909;&#30340;&#65292;&#35831;&#21457;&#36865;&#20320;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>&#22312;&#26412;&#25945;&#31243;&#20013;&#65292;&#24744;&#24050;&#32463;&#23398;&#20064;&#20102;&#22914;&#20309;&#20351;&#29992;Doctrine&#32534;&#20889;&#26597;&#35810;&#26469;&#36873;&#25321;&#24102;&#26377;&#26576;&#20123;&#23646;&#24615;&#30340;&#34892;&#12290;<code>NULL<\/code>&#21734;&#65292;&#23545;&#20102;&#12290;<code>NOT NULL<\/code>&#22312;&#26576;&#20123;&#21015;&#20013;&#26597;&#25214;&#20540;&#12290;&#25105;&#20204;&#35752;&#35770;&#20102;&#20351;&#29992;QueryBuilder&#12289;DQL&#21644;Criteria API&#22312;PHP&#29615;&#22659;&#20013;&#23454;&#29616;&#36825;&#20123;&#26041;&#27861;&#30340;&#22810;&#31181;&#26041;&#24335;&#12290;&#26377;&#20102;&#36825;&#19968;&#30693;&#35782;&#65292;&#20320;&#29616;&#22312;&#21487;&#20197;&#21019;&#24314;&#26356;&#22797;&#26434;&#30340;&#26597;&#35810;&#26469;&#22788;&#29702;&#26681;&#25454;&#25968;&#25454;&#23618;&#24212;&#29992;&#20013;&#30340;&#25968;&#25454;&#24211;&#26159;&#21542;&#23384;&#22312;&#20540;&#30340;&#24212;&#29992;&#31243;&#24207;&#25968;&#25454;&#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;PHP&#20013;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;ORM&#65288;&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#65289;&#24211;&#22914; doctrine2 &#26469;&#22788;&#29702;&#25968;&#25454;&#24211;&#25805;&#20316;&#12290;&#20197;&#19979;&#26159;&#22914;&#20309;&#23558;SQL&#35821;&#21477;&#36716;&#25442;&#20026;PHP&#34920;&#36798;&#24335;&#65292;&#24182;&#26681;&#25454;&#26465;&#20214;&#36873;&#25321;&#21015;&#30340;&#26041;&#27861;&#65306;<\/p>\n<pre><code class=\"language-php\">use DoctrineORMEntityManager;\nuse DoctrineORMQueryBuilder;\n\n\/\/ &#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21517;&#20026;`Employee`&#30340;&#23454;&#20307;&#31867;&#21644;&#19968;&#20010;&#26597;&#35810;&#22120;\n$entityManager = $this-&gt;getDoctrine()-&gt;getManager();\n$queryBuilder = $entityManager-&gt;createQueryBuilder();\n\n\/\/ &#21019;&#24314;&#19968;&#20010;&#26465;&#20214;&#34920;&#36798;&#24335;\n$conditionExpression = $queryBuilder-&gt;expr()-&gt;eq('myColumn', '?1');\n\n\/\/ &#35774;&#32622;&#21442;&#25968;&#20540;\n$setParameter = function ($value) {\n    return ':' . $value;\n};\n\n\/\/ &#20351;&#29992;&#26465;&#20214;&#34920;&#36798;&#24335;&#35774;&#32622;&#21442;&#25968;\n$parameters = [\n    'myColumn' =&gt; null,\n];\n\n\/\/ &#26681;&#25454;&#26465;&#20214;&#33719;&#21462;&#32467;&#26524;\n$resultSet = $queryBuilder\n    -&gt;select('*')\n    -&gt;where($conditionExpression)\n    -&gt;setParameters($parameters)\n    -&gt;execute();\n\n\/\/ &#36755;&#20986;&#32467;&#26524;\nforeach ($resultSet as $row) {\n    echo json_encode($row);\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21517;&#20026; <code>Employee<\/code> &#30340;&#23454;&#20307;&#31867;&#65292;&#23427;&#26377;&#19968;&#20010;&#21517;&#20026; <code>myColumn<\/code> &#30340;&#23383;&#27573;&#12290;&#28982;&#21518;&#65292;&#25105;&#20204;&#21019;&#24314;&#20102;&#19968;&#20010;&#26465;&#20214;&#34920;&#36798;&#24335;&#26469;&#26816;&#26597;&#36825;&#20010;&#23383;&#27573;&#26159;&#21542;&#20026;&#31354;&#12290;<\/p>\n<p>&#27880;&#24847;&#65306;&#20320;&#38656;&#35201;&#30830;&#20445;&#20320;&#22312;&#36816;&#34892;&#36825;&#27573;&#20195;&#30721;&#20043;&#21069;&#24050;&#32463;&#27491;&#30830;&#35774;&#32622;&#20102; <code>$doctrine<\/code> &#21644; <code>$entityManager<\/code> &#21464;&#37327;&#12290;<\/p>\n<p>&#27492;&#22806;&#65292;&#36825;&#37324;&#20351;&#29992;&#30340; SQL &#26597;&#35810;&#26159; <code>SELECT * FROM Employee WHERE myColumn IS NULL;<\/code>. &#36825;&#20010;&#26597;&#35810;&#20250;&#36820;&#22238;&#25152;&#26377; <code>Employee<\/code> &#23454;&#20307;&#20013;&#30340;&#37027;&#20123; <code>myColumn<\/code> &#23383;&#27573;&#20026;&#31354;&#30340;&#35760;&#24405;&#12290;<\/p>\n<p>&#22914;&#26524;&#20320;&#24819;&#35201;&#21482;&#36873;&#25321; <code>myColumn<\/code> &#19981;&#20026; NULL &#30340;&#35760;&#24405;&#65292;&#21487;&#20197;&#20462;&#25913; SQL &#26597;&#35810;&#20026; <code>SELECT * FROM Employee WHERE myColumn != NULL;<\/code>&#12290;&#36825;&#23558;&#20250;&#36820;&#22238;&#28385;&#36275;&#26465;&#20214;&#30340;&#25152;&#26377;&#35760;&#24405;&#12290;<\/p>\n<p>&#21478;&#22806;&#65292;&#22914;&#26524; <code>myColumn<\/code> &#26159;&#19968;&#20010;&#20851;&#32852;&#34920;&#20013;&#30340;&#23383;&#27573;&#65292;&#37027;&#20040;&#20320;&#21487;&#33021;&#38656;&#35201;&#28155;&#21152;&#39069;&#22806;&#30340;&#26465;&#20214;&#26469;&#21305;&#37197;&#35813;&#20851;&#32852;&#34920;&#12290;&#20363;&#22914;&#65292;&#22914;&#26524;&#20320;&#30340; <code>Employee<\/code> &#23454;&#20307;&#20013;&#26377;&#21478;&#19968;&#20010;&#23454;&#20307; <code>Department<\/code>&#65292;&#24182;&#19988;&#20320;&#24819;&#21482;&#36873;&#25321; <code>Employee<\/code> &#20013;&#30340;&#37027;&#20123; <code>Employee.id IN (department.employees_id)<\/code> &#30340;&#35760;&#24405;&#65292;&#37027;&#20040;&#20320;&#21487;&#20197;&#36825;&#26679;&#20462;&#25913; SQL &#26597;&#35810;&#65306;<\/p>\n<pre><code class=\"language-sql\">WHERE employee.id IN (\n    SELECT department.employees_id\n    FROM Department department\n)<\/code><\/pre>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#22312; PHP &#20013;&#20351;&#29992; Doctrine ORM&#65288;Object-Relational Mapping&#65289;&#26469;&#22788;&#29702;&#25968;&#25454;&#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-1141","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\/1141","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=1141"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1141"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1141"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}