{"id":1138,"date":"2025-06-12T14:00:18","date_gmt":"2025-06-12T06:00:18","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1138.html"},"modified":"2025-06-12T14:00:18","modified_gmt":"2025-06-12T06:00:18","slug":"php-doctrine-%e4%bb%8e%e6%9f%a5%e8%af%a2%e7%bb%93%e6%9e%9c%e4%b8%ad%e6%8e%92%e9%99%a4%e5%af%86%e7%a0%81%e5%ad%97%e6%ae%b5","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1138.html","title":{"rendered":"PHP Doctrine: \u4ece\u67e5\u8be2\u7ed3\u679c\u4e2d\u6392\u9664\u5bc6\u7801\u5b57\u6bb5"},"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>&#22909;&#30340;&#65292;&#35753;&#25105;&#20204;&#26469;&#35752;&#35770;&#22914;&#20309;&#20351;&#29992; PHP &#21644; Doctrine ORM &#20174;&#26597;&#35810;&#32467;&#26524;&#20013;&#25490;&#38500;&#23494;&#30721;&#23383;&#27573;&#12290;<\/p>\n<p>&#39318;&#20808;&#65292;&#30830;&#20445;&#20320;&#24050;&#32463;&#23433;&#35013;&#20102; Doctrine ORM &#21644;&#24517;&#35201;&#30340;&#20381;&#36182;&#39033;&#12290;&#22914;&#26524;&#20320;&#36824;&#27809;&#26377;&#23433;&#35013;&#65292;&#21487;&#20197;&#20351;&#29992; Composer &#26469;&#31649;&#29702;&#20381;&#36182;&#65306;<\/p>\n<pre><code class=\"language-bash\">composer require doctrine\/orm<\/code><\/pre>\n<p>&#25509;&#19979;&#26469;&#65292;&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#23454;&#20307;&#31867; <code>User<\/code>&#65292;&#20854;&#20013;&#21253;&#21547;&#23494;&#30721;&#23383;&#27573; <code>password<\/code>&#12290;&#25105;&#20204;&#24076;&#26395;&#22312;&#26597;&#35810;&#32467;&#26524;&#20013;&#25490;&#38500;&#36825;&#20010;&#23383;&#27573;&#12290;<\/p>\n<ol>\n<li>\n<p><strong>&#23450;&#20041;&#23454;&#20307;&#31867;<\/strong>&#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    private $id;\n\n   \/**\n    * @ORMColumn(length=255)\n    *\/\n   private $username;\n\n   \/**\n    * @ORMColumn(length=255, nullable=true)\n    *\/\n   private $email;\n\n   \/**\n    * @ORMColumn(length=255, nullable=true)\n    *\/\n   private $password;\n\n   \/\/ Getters and setters\n}<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#21019;&#24314; UserRepository &#25509;&#21475;&#21644;&#23454;&#29616;&#31867;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppRepository;\n\nuse DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository;\nuse DoctrinePersistenceManagerRegistry;\n\nclass UserRepository extends ServiceEntityRepository\n{\n   public function __construct(ManagerRegistry $registry)\n   {\n       parent::__construct($registry, User::class);\n   }\n\n   public function findAllWithPasswordExcluded()\n   {\n       return $this-&gt;createQueryBuilder('u')\n           -&gt;select('u.id', 'u.username', 'u.email')\n           -&gt;getQuery()\n           -&gt;getResult();\n   }\n}<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#20351;&#29992; UserRepository &#26597;&#35810;&#32467;&#26524;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nrequire_once 'vendor\/autoload.php';\n\nuse AppEntityUser;\nuse AppRepositoryUserRepository;\n\n$entityManager = EntityManagerFactory::create(['driver' =&gt; 'pdo_mysql', 'host' =&gt; 'localhost', 'dbname' =&gt; 'your_database', 'user' =&gt; 'your_user', 'password' =&gt; 'your_password'])-&gt;getManager();\n\n$userRepository = new UserRepository($entityManager);\n\n$usersWithoutPassword = $userRepository-&gt;findAllWithPasswordExcluded();\n\nforeach ($usersWithoutPassword as $user) {\n   echo \"ID: {$user-&gt;getId()}, Username: {$user-&gt;getUsername()}, Email: {$user-&gt;getEmail()}n\";\n}<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>&#22312;&#36825;&#20010;&#31034;&#20363;&#20013;&#65292;&#25105;&#20204;&#36890;&#36807;&#26500;&#24314;&#26597;&#35810;&#24182;&#25490;&#38500; <code>password<\/code> &#23383;&#27573;&#26469;&#33719;&#21462;&#29992;&#25143;&#21015;&#34920;&#12290;&#35831;&#27880;&#24847;&#65292;&#36825;&#21482;&#26159;&#19968;&#20010;&#31616;&#21333;&#30340;&#31034;&#20363;&#65292;&#23454;&#38469;&#24212;&#29992;&#20013;&#21487;&#33021;&#38656;&#35201;&#26356;&#22810;&#30340;&#22788;&#29702;&#21644;&#23433;&#20840;&#24615;&#25514;&#26045;&#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>Doctrine &#26159;&#19968;&#20010;&#24378;&#22823;&#30340; PHP &#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#22120;&#65288;ORM&#65289;&#65292;&#23427;&#20026;&#25968;&#25454;&#24211;&#35775;&#38382;&#25552;&#20379;&#20102;&#19968;&#23618;&#25277;&#35937;&#12290;&#36890;&#36807;&#20351;&#29992;&#23545;&#35937;&#32780;&#19981;&#26159; SQL &#35821;&#21477;&#65292;&#24320;&#21457;&#20154;&#21592;&#21487;&#20197;&#26356;&#36731;&#26494;&#22320;&#19982;&#25968;&#25454;&#24211;&#20132;&#20114;&#24182;&#20943;&#23569;&#38656;&#35201;&#32534;&#20889;&#22823;&#37327;&#26679;&#26495;&#20195;&#30721;&#30340;&#27425;&#25968;&#12290;&#35201;&#20805;&#20998;&#21033;&#29992; Doctrine &#30340;&#21151;&#33021;&#65292;&#25484;&#25569; DQL&#65288;Doctrine &#26597;&#35810;&#35821;&#35328;&#65289;&#12289;&#23454;&#20307;&#20179;&#24211;&#20197;&#21450;&#19982;&#20854;&#30456;&#20851;&#30340;&#26144;&#23556;&#20803;&#25968;&#25454;&#33267;&#20851;&#37325;&#35201;&#12290;<\/p><p>&#22312;&#20351;&#29992;Doctrine&#22788;&#29702;PHP&#20013;&#30340;&#26597;&#35810;&#26102;&#65292;&#29702;&#35299;&#22914;&#20309;&#26681;&#25454;&#23433;&#20840;&#24615;&#21450;&#25928;&#29575;&#23450;&#21046;&#25968;&#25454;&#26816;&#32034;&#33267;&#20851;&#37325;&#35201;&#12290;&#19968;&#20010;&#24120;&#35265;&#30340;&#38656;&#27714;&#26159;&#22312;&#26597;&#35810;&#32467;&#26524;&#20013;&#25490;&#38500;&#25935;&#24863;&#25968;&#25454;&#65292;&#27604;&#22914;&#23494;&#30721;&#23383;&#27573;&#12290;&#36825;&#26679;&#20570;&#19981;&#20165;&#33021;&#22815;&#20943;&#23569;&#23433;&#20840;&#39118;&#38505;&#65292;&#36824;&#33021;&#30830;&#20445;&#25935;&#24863;&#20449;&#24687;&#19981;&#20250;&#26080;&#24847;&#38388;&#36890;&#36807;&#24212;&#29992;&#30340;&#19981;&#21516;&#23618;&#20256;&#36882;&#20986;&#21435;&#12290;&#22312;&#36825;&#31687;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#23558;&#37325;&#28857;&#20171;&#32461;&#22312;PHP&#39033;&#30446;&#20013;&#20351;&#29992;Doctrine ORM&#26102;&#22914;&#20309;&#25490;&#38500;&#26597;&#35810;&#32467;&#26524;&#20013;&#30340;&#23494;&#30721;&#25110;&#20854;&#20182;&#25935;&#24863;&#20449;&#24687;&#30340;&#24517;&#35201;&#27493;&#39588;&#21644;&#26368;&#20339;&#23454;&#36341;&#12290;<\/p><h2>&#21019;&#24314;&#29992;&#25143;&#23454;&#20307;<\/h2><p>&#35753;&#25105;&#20204;&#20808;&#23450;&#20041;&#19968;&#20010;&#31616;&#21333;&#30340;<code>User<\/code>&#22312;&#24744;&#30340;&#39033;&#30446;&#20013;&#24050;&#32463;&#35774;&#32622;&#22909;&#20102;Doctrine&#21518;&#65292;&#24744;&#21487;&#20197;&#21019;&#24314;&#23454;&#20307;&#31867;&#65306;<\/p><pre><code>\/**\n* @Entity\n* @Table(name=\"users\")\n*\/\nclass User {\n \/**\n * @Id\n * @GeneratedValue\n * @Column(type=\"integer\")\n *\/\n private $id;\n\n \/**\n * @Column(type=\"string\", length=255)\n *\/\n private $username;\n\n \/**\n * @Column(type=\"string\", length=255)\n *\/\n private $password;\n \/\/ Getters and setters...\n}\n<\/code><\/pre><p>&#22312;&#26412;&#23454;&#20307;&#31867;&#20013;&#65292;&#25105;&#20204;&#26377;&#19968;&#20010;<code>id<\/code>&#24050;&#32463;&#25910;&#21040;&#65292;&#26377;&#20160;&#20040;&#21487;&#20197;&#24110;&#21161;&#24744;&#30340;&#65311;<code>username<\/code>&#21644;&#19968;&#20010;<code>password<\/code>&#20026;&#27599;&#20010;&#27880;&#37322;&#30340;&#23646;&#24615;&#26631;&#27880;&#30456;&#24212;&#30340;Doctrine&#27880;&#35299;&#65292;&#20197;&#20415;&#26144;&#23556;&#21040;&#34920;&#23383;&#27573;&#12290;<\/p><h2>&#22312;&#26597;&#35810;&#20013;&#25490;&#38500;&#23494;&#30721;&#12290;<\/h2><p>&#25490;&#38500;&#25935;&#24863;&#20449;&#24687;&#65288;&#22914;&#23494;&#30721;&#65289;&#30340;&#26041;&#27861;&#21487;&#20197;&#22312;Doctrine ORM&#20013;&#20351;&#29992;&#22810;&#31181;&#26041;&#24335;&#23454;&#29616;&#65306;<\/p><h3>&#20351;&#29992;DQL&#65288;Data Query Language&#65289;&#12290;<\/h3><p>&#25968;&#25454;&#23545;&#35937;&#26597;&#35810;&#35821;&#35328;&#65288;DQL&#65289;&#26159;&#23545;SQL&#30340;&#24378;&#22823;&#25277;&#35937;&#65292;&#30475;&#36215;&#26469;&#20687;SQL&#20294;&#25805;&#20316;&#23545;&#35937;&#21644;&#23383;&#27573;&#12290;&#36825;&#37324;&#26377;&#19968;&#20010;&#20351;&#29992;&#20102;&#25968;&#25454;&#20179;&#24211;&#30340;DQL&#26597;&#35810;&#31034;&#20363;&#65292;&#35813;&#26597;&#35810;&#20174;&#19968;&#20010;&#20179;&#24211;&#20013;&#26816;&#32034;&#29992;&#25143;&#20449;&#24687;&#65292;&#19981;&#21253;&#25324;&#23494;&#30721;&#23383;&#27573;&#65306;<\/p><pre><code>$entityManager = DoctrineORMEntityManager::create($conn, $config);\n$query = $entityManager-&gt;createQuery('SELECT u.id, u.username FROM MyProjectModelUser u');\n$users = $query-&gt;getResult();\n<\/code><\/pre><p>&#35813;&#26597;&#35810;&#26126;&#30830;&#25351;&#23450;&#20102;&#35201;&#26816;&#32034;&#30340;&#23383;&#27573;&#65292;&#30830;&#20445;&#23494;&#30721;&#23383;&#27573;&#19981;&#20250;&#34987;&#36873;&#25321;&#12290;<\/p><h3>&#37096;&#20998;&#23545;&#35937;<\/h3><p>Doctrine&#20063;&#20801;&#35768;&#21019;&#24314;&#37096;&#20998;&#23545;&#35937;&#65292;&#36825;&#20123;&#23545;&#35937;&#24182;&#19981;&#23436;&#20840;&#21021;&#22987;&#21270;&#25152;&#26377;&#30340;&#23383;&#27573;&#12290;&#35201;&#21019;&#24314;&#19968;&#20010;&#37096;&#20998;&#23545;&#35937;&#24182;&#25490;&#38500;&#23494;&#30721;&#23383;&#27573;&#65292;&#35831;&#20462;&#25913;DQL&#22914;&#19979;&#65306;<\/p><pre><code>$query = $entityManager-&gt;createQuery('SELECT partial u.{id, username} FROM MyProjectModelUser u');\n$users = $query-&gt;getResult();\n<\/code><\/pre><p>&#35831;&#27880;&#24847;&#20351;&#29992;&#30340;&#24773;&#20917;&#12290;<code>partial<\/code>&#22312;&#25324;&#21495;&#20869;&#30340;&#36873;&#25321;&#23383;&#27573;&#12290;&#36825;&#20063;&#23558;&#25552;&#39640;&#24615;&#33021;&#65292;&#22240;&#20026;&#21482;&#26377;&#24517;&#35201;&#30340;&#23383;&#27573;&#20250;&#34987;&#21152;&#36733;&#12290;<\/p><h3>&#20351;&#29992;QueryBuilder<\/h3><p>&#22914;&#26524;&#20320;&#26356;&#21916;&#27426;&#38754;&#21521;&#23545;&#35937;&#30340;&#26041;&#27861;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;&#12290;<code>QueryBuilder<\/code>&#65306;<\/p><pre><code>$repository = $entityManager-&gt;getRepository('MyProjectModelUser');\n$queryBuilder = $repository-&gt;createQueryBuilder('u')\n -&gt;select('u.id', 'u.username')\n -&gt;getQuery();\n$users = $queryBuilder-&gt;getResult();\n<\/code><\/pre><p>&#36825;&#37324;&#26159;&#12290;<code>createQueryBuilder<\/code>&#26500;&#24314;&#26597;&#35810;&#31243;&#24207;&#21270;&#22320;&#36827;&#34892;&#65292;&#25105;&#20204;&#26126;&#30830;&#25490;&#38500;&#20102;&#23494;&#30721;&#65292;&#22240;&#20026;&#23427;&#27809;&#26377;&#21253;&#21547;&#22312;&#20869;&#12290;<code>select()<\/code>&#26041;&#27861;&#12290;<\/p><h3>&#38544;&#34255;&#23383;&#27573;&#22312;&#23454;&#20307;&#20013;<\/h3><p>&#21478;&#19968;&#31181;&#26041;&#27861;&#26159;&#22312;&#23454;&#20307;&#26412;&#36523;&#20869;&#38544;&#34255;&#23383;&#27573;&#65292;&#20363;&#22914;&#36890;&#36807;&#23450;&#20041;&#19968;&#20010;&#33258;&#23450;&#20041;&#30340;getter&#26469;&#24573;&#30053;&#23494;&#30721;&#65306;<\/p><pre><code>class User {\n \/\/ Fields, getters, and setters...\n\n public function getSafeData() {\n return [\n 'id' =&gt; $this-&gt;id,\n 'username' =&gt; $this-&gt;username,\n \/\/ Do not return the password\n ];\n }\n}\n<\/code><\/pre><p>&#24403;&#20320;&#24819;&#33719;&#21462;&#29992;&#25143;&#25968;&#25454;&#65292;&#20294;&#21448;&#19981;&#24819;&#27844;&#38706;&#25935;&#24863;&#20449;&#24687;&#26102;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;<code>getSafeData()<\/code>&#20351;&#29992;&#26041;&#27861;&#20195;&#26367;&#40664;&#35748;&#30340;getter&#12290;<\/p><h3>&#20351;&#29992;&#24207;&#21015;&#21270;&#32452;<\/h3><p>&#26368;&#21518;&#65292;&#22914;&#26524;&#20351;&#29992;&#30340;&#26159;API&#24179;&#21488;&#25110;&#20854;&#20182;&#25903;&#25345;&#32452;&#30340;&#24207;&#21015;&#21270;&#26426;&#21046;&#65288;&#22914;JMS&#24207;&#21015;&#21270;&#22120;&#65289;&#65292;&#35831;&#32771;&#34385;&#20351;&#29992;&#24207;&#21015;&#21270;&#32452;&#12290;<\/p><pre><code>\/**\n* @Entity\n* @Table(name=\"users\")\n*\/\nclass User {\n \/\/ Fields...\n\n \/**\n * @Column(type=\"string\", length=255)\n * @Groups({\"user:read\"})\n *\/\n private $username;\n\n \/**\n * @Column(type=\"string\", length=255)\n * @Groups({\"user:write\"})\n *\/\n private $password;\n \/\/ Getters and setters...\n}\n<\/code><\/pre><p>&#24403;&#20320;&#24207;&#21015;&#21270;&#23545;&#35937;&#20026;JSON&#65288;&#20363;&#22914;&#65292;&#20316;&#20026;API&#21709;&#24212;&#30340;&#19968;&#37096;&#20998;&#65289;&#65292;&#20320;&#21487;&#20197;&#25351;&#23450;&#21482;&#21253;&#25324;&ldquo;user:read&rdquo;&#32452;&#20013;&#30340;&#23383;&#27573;&#65292;&#20174;&#32780;&#25490;&#38500;&#23494;&#30721;&#12290;<\/p><h2>&#32467;&#35770;<\/h2><p>&#25490;&#38500;&#25968;&#25454;&#24211;&#26597;&#35810;&#26102;&#21253;&#21547;&#25935;&#24863;&#23383;&#27573;&#65288;&#22914;&#23494;&#30721;&#65289;&#30340;&#26368;&#20339;&#23454;&#36341;&#65292;&#21487;&#20197;&#22686;&#24378;&#24212;&#29992;&#30340;&#23433;&#20840;&#24615;&#21644;&#23436;&#25972;&#24615;&#12290;&#21033;&#29992;DQL&#12289;&#37096;&#20998;&#23545;&#35937;&#31561;&#29305;&#24615;&#65292;&#21487;&#20197;&#23454;&#29616;&#36825;&#19968;&#30446;&#26631;&#12290;<code>QueryBuilder<\/code>&#24744;&#21487;&#20197;&#20351;&#29992;&#23454;&#20307;&#26041;&#27861;&#25110;&#24207;&#21015;&#21270;&#32452;&#26469;&#20445;&#25345;&#39640;&#25928;&#21644;&#23433;&#20840;&#30340;&#25968;&#25454;&#26816;&#32034;&#36807;&#31243;&#12290;&#22987;&#32456;&#32771;&#34385;&#21738;&#31181;&#26041;&#27861;&#26368;&#36866;&#21512;&#24744;&#30340;&#24212;&#29992;&#31243;&#24207;&#19978;&#19979;&#25991;&#65292;&#24182;&#30830;&#20445;&#27599;&#20010;&#26041;&#27861;&#37117;&#31526;&#21512;&#26368;&#23567;&#29305;&#26435;&#21407;&#21017;&#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;&#20351;&#29992;Doctrine ORM&#65288;Object-Relational Mapping&#65289;&#26102;&#65292;&#20026;&#20102;&#30830;&#20445;&#23433;&#20840;&#24615;&#21644;&#38544;&#31169;&#24615;&#65292;&#25105;&#20204;&#36890;&#24120;&#19981;&#30452;&#25509;&#35775;&#38382;&#25968;&#25454;&#24211;&#20013;&#30340;&#23494;&#30721;&#23383;&#27573;&#12290;&#36825;&#26159;&#22240;&#20026;&#36825;&#20123;&#23383;&#27573;&#36890;&#24120;&#26159;&#25935;&#24863;&#30340;&#65292;&#24182;&#19988;&#21487;&#33021;&#20250;&#34987;&#26410;&#25480;&#26435;&#30340;&#29992;&#25143;&#35775;&#38382;&#12290;&#28982;&#32780;&#65292;&#22914;&#26524;&#30830;&#23454;&#38656;&#35201;&#22312;SQL&#26597;&#35810;&#20013;&#25490;&#38500;&#23494;&#30721;&#23383;&#27573;&#65292;&#21487;&#20197;&#32771;&#34385;&#20197;&#19979;&#26041;&#27861;&#65306;<\/p>\n<ol>\n<li>&#20351;&#29992;PDO&#65306;&#34429;&#28982;&#36825;&#31181;&#26041;&#24335;&#21487;&#33021;&#19981;&#22914;ORM&#37027;&#20040;&#20581;&#22766;&#65292;&#20294;&#22312;&#26576;&#20123;&#24773;&#20917;&#19979;&#65292;&#23427;&#20173;&#28982;&#21487;&#20197;&#25552;&#20379;&#19968;&#20123;&#28789;&#27963;&#24615;&#12290;<\/li>\n<\/ol>\n<pre><code class=\"language-php\">$pdo = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password');\n$sql = \"SELECT * FROM users WHERE email=:email\";\n$stmt = $pdo-&gt;prepare($sql);\n$stmt-&gt;bindParam(':email', $email, PDO::PARAM_STR);\n\n\/\/ &#25191;&#34892;&#26597;&#35810;&#24182;&#33719;&#21462;&#32467;&#26524;&#38598;\n$result = $stmt-&gt;execute();\nwhile ($row = $result-&gt;fetch(PDO::FETCH_ASSOC)) {\n    \/\/ &#22312;&#36825;&#37324;&#22788;&#29702;&#38750;&#23494;&#30721;&#23383;&#27573;...\n}<\/code><\/pre>\n<ol start=\"2\">\n<li>&#20351;&#29992;ORM&#65306;&#23613;&#31649;&#36825;&#31181;&#26041;&#24335;&#26356;&#28789;&#27963;&#65292;&#20294;&#23433;&#20840;&#24615;&#20063;&#26356;&#39640;&#12290;&#22914;&#26524;&#20320;&#27491;&#22312;&#20351;&#29992;ORM&#65292;&#20363;&#22914;Eloquent ORM&#65292;&#21487;&#20197;&#36890;&#36807;&#35774;&#32622;&#21442;&#25968;&#30340;&#26041;&#24335;&#36991;&#20813;&#35775;&#38382;&#23494;&#30721;&#23383;&#27573;&#65306;<\/li>\n<\/ol>\n<pre><code class=\"language-php\">$users = User::all()\n            -&gt;where('email', '=', $email)\n            -&gt;get();\n\nforeach ($users as $user) {\n    if ($user-&gt;password == 'your_password') {\n        \/\/ &#29992;&#25143;&#23384;&#22312;&#24182;&#19988;&#23494;&#30721;&#21305;&#37197;...\n    }\n}<\/code><\/pre>\n<ol start=\"3\">\n<li>\n<p>&#20351;&#29992;&#32531;&#23384;&#65306;&#22914;&#26524;&#20320;&#30340;&#25968;&#25454;&#27169;&#22411;&#25903;&#25345;&#32531;&#23384;&#26426;&#21046;&#65292;&#21487;&#20197;&#22312;&#26597;&#35810;&#20043;&#21069;&#20808;&#26816;&#26597;&#25968;&#25454;&#26159;&#21542;&#24050;&#23384;&#22312;&#20110;&#32531;&#23384;&#20013;&#65292;&#20174;&#32780;&#36991;&#20813;&#25191;&#34892;&#19981;&#24517;&#35201;&#30340;&#26597;&#35810;&#12290;<\/p>\n<\/li>\n<li>\n<p>&#25968;&#25454;&#24211;&#20248;&#21270;&#65306;&#23450;&#26399;&#23457;&#26597;&#21644;&#20248;&#21270;&#25968;&#25454;&#24211;&#32467;&#26500;&#65292;&#20943;&#23569;&#23494;&#30721;&#23383;&#27573;&#30340;&#25968;&#37327;&#65292;&#20063;&#21487;&#20197;&#24110;&#21161;&#25552;&#39640;&#23433;&#20840;&#24615;&#12290;<\/p>\n<\/li>\n<\/ol>\n<p>&#35831;&#26681;&#25454;&#24744;&#30340;&#20855;&#20307;&#38656;&#27714;&#36873;&#25321;&#21512;&#36866;&#30340;&#26041;&#27861;&#12290;&#20197;&#19978;&#25152;&#26377;&#26041;&#27861;&#37117;&#24212;&#19982;&#36981;&#24490;&#26368;&#20339;&#23454;&#36341;&#30340;&#21407;&#21017;&#30456;&#32467;&#21512;&#65292;&#20197;&#30830;&#20445;&#24212;&#29992;&#31243;&#24207;&#30340;&#23433;&#20840;&#24615;&#21644;&#38544;&#31169;&#24615;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#22909;&#30340;&#65292;&#35753;&#25105;&#20204;&#26469;&#35752;&#35770;&#22914;&#20309;&#20351;&#29992; PHP &#21644; Doctrine ORM &#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-1138","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\/1138","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=1138"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1138"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1138"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1138"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}