{"id":1139,"date":"2025-06-12T14:01:37","date_gmt":"2025-06-12T06:01:37","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1139.html"},"modified":"2025-06-12T14:01:37","modified_gmt":"2025-06-12T06:01:37","slug":"php-doctrine%ef%bc%9a%e5%85%b7%e6%9c%89%e9%bb%98%e8%ae%a4%e5%80%bc%e7%9a%84%e5%88%97%e6%8c%87%e5%8d%97","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1139.html","title":{"rendered":"PHP Doctrine\uff1a\u5177\u6709\u9ed8\u8ba4\u503c\u7684\u5217\u6307\u5357"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#26631;&#39064;&#65306;PHP Doctrine&#65306;&#20351;&#29992;&#40664;&#35748;&#20540;&#21019;&#24314;&#34920;&#21015;<\/p>\n<p>&#22312;&#20351;&#29992; PHP &#30340; Doctrine ORM &#36827;&#34892;&#25968;&#25454;&#24211;&#25805;&#20316;&#26102;&#65292;&#26377;&#26102;&#38656;&#35201;&#20026;&#34920;&#20013;&#30340;&#21015;&#35774;&#32622;&#40664;&#35748;&#20540;&#12290;&#40664;&#35748;&#20540;&#21487;&#20197;&#26159;&#24120;&#37327;&#12289;&#34920;&#36798;&#24335;&#25110;&#20854;&#20182;&#25968;&#25454;&#31867;&#22411;&#12290;&#20197;&#19979;&#26159;&#19968;&#20123;&#24120;&#35265;&#30340;&#26041;&#27861;&#21644;&#31034;&#20363;&#20195;&#30721;&#26469;&#23454;&#29616;&#36825;&#19968;&#28857;&#12290;<\/p>\n<h3>1. &#20351;&#29992;&#24120;&#37327;&#20316;&#20026;&#40664;&#35748;&#20540;<\/h3>\n<p>&#20320;&#21487;&#20197;&#30452;&#25509;&#22312;&#23454;&#20307;&#31867;&#20013;&#23450;&#20041;&#24120;&#37327;&#65292;&#24182;&#23558;&#20854;&#29992;&#20316;&#40664;&#35748;&#20540;&#12290;<\/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, nullable=false)\n     *\/\n    private $username = 'default_username';\n\n    \/\/ Getters and Setters\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;<code>$username<\/code> &#21015;&#30340;&#40664;&#35748;&#20540;&#34987;&#35774;&#32622;&#20026; <code>'default_username'<\/code>&#12290;<\/p>\n<h3>2. &#20351;&#29992;&#34920;&#36798;&#24335;&#20316;&#20026;&#40664;&#35748;&#20540;<\/h3>\n<p>&#20320;&#20063;&#21487;&#20197;&#20351;&#29992;&#34920;&#36798;&#24335;&#26469;&#35745;&#31639;&#40664;&#35748;&#20540;&#12290;<\/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=\"datetime\", nullable=true)\n     *\/\n    private $created_at = new DateTime();\n\n    \/\/ Getters and Setters\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;<code>$created_at<\/code> &#21015;&#30340;&#40664;&#35748;&#20540;&#34987;&#35774;&#32622;&#20026;&#24403;&#21069;&#26085;&#26399;&#21644;&#26102;&#38388;&#12290;<\/p>\n<h3>3. &#20351;&#29992;&#20989;&#25968;&#20316;&#20026;&#40664;&#35748;&#20540;<\/h3>\n<p>&#20320;&#36824;&#21487;&#20197;&#20351;&#29992;&#20989;&#25968;&#26469;&#35745;&#31639;&#40664;&#35748;&#20540;&#12290;<\/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, nullable=false)\n     *\/\n    private $email = function (): string {\n        return uniqid() . '@example.com';\n    };\n\n    \/\/ Getters and Setters\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;<code>$email<\/code> &#21015;&#30340;&#40664;&#35748;&#20540;&#34987;&#35774;&#32622;&#20026;&#19968;&#20010;&#21807;&#19968;&#30340;&#30005;&#23376;&#37038;&#20214;&#22320;&#22336;&#12290;<\/p>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#19979;&#38754;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;&#31034;&#20363;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312;&#23454;&#20307;&#31867;&#20013;&#20351;&#29992;&#36825;&#20123;&#26041;&#27861;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppEntity;\n\nuse DoctrineORMMapping as ORM;\n\n\/**\n * @ORMEntity(repositoryClass=\"AppRepositoryUserRepository\")\n *\/\nclass User\n{\n    \/**\n     * @ORMId\n     * @ORMGeneratedValue(strategy=\"AUTO\")\n     * @ORMColumn(type=\"integer\")\n     *\/\n    private $id;\n\n    \/**\n     * @ORMColumn(type=\"string\", length=255, nullable=false)\n     *\/\n    private $username = 'default_username';\n\n    \/**\n     * @ORMColumn(type=\"datetime\", nullable=true)\n     *\/\n    private $created_at = new DateTime();\n\n    \/**\n     * @ORMColumn(type=\"string\", length=255, nullable=false)\n     *\/\n    private $email = function (): string {\n        return uniqid() . '@example.com';\n    };\n\n    \/\/ Getters and Setters\n}\n\n\/\/ Example usage in a repository class\nnamespace AppRepository;\n\nuse DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository;\nuse AppEntityUser;\n\nclass UserRepository extends ServiceEntityRepository\n{\n    public function __construct(EntityManagerInterface $entityManager)\n    {\n        parent::__construct($entityManager);\n    }\n\n    public function findAllWithDefaults(): array\n    {\n        $qb = $this-&gt;createQueryBuilder('u');\n        $qb-&gt;select('u.id', 'u.username', 'u.created_at', 'u.email');\n\n        return $qb-&gt;getQuery()-&gt;getResult();\n    }\n}<\/code><\/pre>\n<p>&#36890;&#36807;&#36825;&#31181;&#26041;&#24335;&#65292;&#20320;&#21487;&#20197;&#22312; Doctrine &#20013;&#36731;&#26494;&#22320;&#20026;&#34920;&#21015;&#35774;&#32622;&#40664;&#35748;&#20540;&#12290;&#26681;&#25454;&#20320;&#30340;&#20855;&#20307;&#38656;&#27714;&#36873;&#25321;&#21512;&#36866;&#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>Doctrine &#26159;&#19968;&#20010;&#24378;&#22823;&#30340;PHP&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#22120;&#65288;ORM&#65289;&#65292;&#20854;&#26680;&#24515;&#29305;&#24449;&#20043;&#19968;&#23601;&#26159;&#33021;&#22815;&#25277;&#35937;&#25968;&#25454;&#24211;&#20132;&#20114;&#65292;&#20351;&#24471;&#24320;&#21457;&#20154;&#21592;&#26356;&#23481;&#26131;&#19982;&#25968;&#25454;&#24211;&#36827;&#34892;&#20132;&#20114;&#12290;&#22312;&#22823;&#22810;&#25968;&#24212;&#29992;&#20013;&#65292;&#35774;&#32622;&#25968;&#25454;&#24211;&#21015;&#30340;&#40664;&#35748;&#20540;&#26159;&#19968;&#39033;&#24120;&#35265;&#30340;&#20219;&#21153;&#65292;&#26412;&#25351;&#21335;&#23558;&#25506;&#35752;&#22914;&#20309;&#20351;&#29992; Doctrine &#23454;&#20307;&#20013;&#30340;&#40664;&#35748;&#20540;&#12290;<\/p><h2>&#29702;&#35299;&#40664;&#35748;&#20540;<\/h2><p>&#40664;&#35748;&#20540;&#21487;&#20197;&#22312;&#25968;&#25454;&#24211;&#21015;&#19978;&#30452;&#25509;&#23450;&#20041;&#65292;&#20063;&#21487;&#20197;&#36890;&#36807;&#24212;&#29992;&#31243;&#24207;&#35774;&#32622;&#12290;&#22312;&#24212;&#29992;&#31243;&#24207;&#20391;&#35774;&#23450;&#40664;&#35748;&#20540;&#36890;&#24120;&#33021;&#20445;&#25345;&#20195;&#30721;&#25511;&#21046;&#26435;&#65292;&#36825;&#23545;&#20110;&#31227;&#26893;&#24615;&#21644;&#29256;&#26412;&#31649;&#29702;&#37117;&#26159;&#26377;&#24110;&#21161;&#30340;&#12290;<\/p><h3>&#25968;&#25454;&#24211;&#32423;&#21035;&#30340;&#40664;&#35748;&#35774;&#32622;<\/h3><p>&#20026;&#20102;&#35774;&#32622;&#25968;&#25454;&#24211;&#32423;&#21035;&#30340;&#40664;&#35748;&#20540;&#65292;&#36890;&#24120;&#38656;&#35201;&#20462;&#25913;&#25968;&#25454;&#24211;&#21015;&#23450;&#20041;&#65306;<\/p><pre><code>ALTER TABLE user ADD COLUMN signup_date DATE DEFAULT CURRENT_DATE;\n<\/code><\/pre><p>&#36825;&#31181;&#26041;&#27861;&#20250;&#30452;&#25509;&#22312;&#25968;&#25454;&#24211;&#20013;&#35774;&#32622;&#40664;&#35748;&#20540;&#12290;<\/p><h3>&#24212;&#29992;&#23618;&#40664;&#35748;&#20540;<\/h3><p>&#22312;Doctrine&#23454;&#20307;&#20869;&#37096;&#35774;&#32622;&#40664;&#35748;&#20540;&#20801;&#35768;&#24744;&#36890;&#36807;PHP&#20195;&#30721;&#26469;&#22788;&#29702;&#40664;&#35748;&#20540;&#65306;<\/p><pre><code>\/**\n * @ORMEntity\n * @ORMTable(name=\"user\")\n *\/\nclass User {\n    \/**\n     * @ORMColumn(type=\"date\", options={\"default\": \"CURRENT_DATE\"})\n     *\/\n    private $signupDate;\n    \n    public function __construct() {\n        $this-&gt;signupDate = new DateTime();\n    }\n}\n<\/code><\/pre><p>&#22312;User&#23454;&#20307;&#30340;PHP&#26500;&#36896;&#20989;&#25968;&#20013;&#35774;&#32622;&#29992;&#25143;&#20449;&#24687;&#26102;&#65292;&#20320;&#21487;&#20197;&#36825;&#26679;&#20570;&#65306;<code>$signupDate<\/code>&#24403;&#21069;&#26085;&#26399;&#30830;&#20445;&#25152;&#26377;&#26032;&#29992;&#25143;&#23454;&#20363;&#37117;&#40664;&#35748;&#26377;&ldquo;&#20170;&#22825;&rdquo;&#30340;&#27880;&#20876;&#26085;&#26399;&#65292;&#38500;&#38750;&#21478;&#26377;&#25351;&#23450;&#12290;<\/p><h2>&#27880;&#37322;&#40664;&#35748;&#20540;<\/h2><p>&#22312;&#20351;&#29992;&#27880;&#35299;&#26102;&#65292;&#21487;&#20197;&#22312;&#20854;&#20013;&#23450;&#20041;&#40664;&#35748;&#20540;&#12290;<code>@ORMColumn<\/code>&#27491;&#22312;&#20351;&#29992;&#20013;<code>options<\/code>&#25265;&#27465;&#65292;&#25105;&#26410;&#33021;&#29702;&#35299;&#24744;&#30340;&#38382;&#39064;&#65292;&#35831;&#37325;&#26032;&#25551;&#36848;&#24744;&#38656;&#35201;&#24110;&#21161;&#30340;&#20869;&#23481;&#12290;<\/p><pre><code>\/**\n * @ORMColumn(type=\"string\", length=255, options={\"default\":\"New User\"})\n *\/\nprivate $name;\n<\/code><\/pre><p>&#36825;&#23558;&#25226;&ldquo;&#26032;&#29992;&#25143;&rdquo;&#35774;&#32622;&#20026;&#25152;&#26377;&#26032;&#35760;&#24405;&#30340;&#40664;&#35748;&#21517;&#31216;&#20540;&#12290;<\/p><h2>&#40664;&#35748;&#20540;&#21644;Doctrine&#36801;&#31227;<\/h2><p>&#25968;&#25454;&#26144;&#23556;&#65288;Doctrine migrations&#65289;&#29992;&#20110;&#23433;&#20840;&#22320;&#26356;&#26032;&#25968;&#25454;&#24211;&#27169;&#24335;&#12290;&#24403;&#20320;&#22312;&#28155;&#21152;&#19968;&#20010;&#20855;&#26377;&#40664;&#35748;&#20540;&#30340;&#26032;&#21015;&#24182;&#21019;&#24314;&#19968;&#20010;&#36801;&#31227;&#26102;&#65292;Doctrine&#20250;&#36127;&#36131;&#23558;&#23454;&#20307;&#30340;&#40664;&#35748;&#20540;&#36716;&#25442;&#20026;SQL&#12290;<\/p><pre><code>public function up(Schema $schema) : void\n{\n    $this-&gt;addSql('ALTER TABLE user ADD COLUMN is_active BOOLEAN DEFAULT true');\n}\n<\/code><\/pre><p>&#25191;&#34892;&#27492;&#36801;&#31227;&#23558;&#20462;&#25913;&#29992;&#25143;&#34920;&#65292;&#28155;&#21152;&#19968;&#20010;&#24102;&#26377;&#40664;&#35748;&#20540;&#30340;&#21015;&#12290;<\/p><h2>&#19982;&#26522;&#20030;&#31867;&#22411;&#30340;&#24037;&#20316;<\/h2><p>&#22914;&#26524;&#25968;&#25454;&#24211;&#24179;&#21488;&#25903;&#25345;&#26522;&#20030;&#65292;&#37027;&#20040;&#22312;&#26522;&#20030;&#21015;&#19978;&#35774;&#32622;&#40664;&#35748;&#20540;&#19982;&#20219;&#20309;&#20854;&#20182;&#40664;&#35748;&#20540;&#31867;&#20284;&#65306;<\/p><pre><code>\/**\n * @ORMColumn(type=\"string\", columnDefinition=\"ENUM('new', 'active', 'inactive')\" options={\"default\": \"new\"})\n *\/\nprivate $status;\n<\/code><\/pre><p>&#36825;&#20250;&#20026;&#25152;&#26377;&#26410;&#25351;&#23450;&#29366;&#24577;&#30340;&#26032;&#35760;&#24405;&#35774;&#32622;&#40664;&#35748;&#30340;&ldquo;&#26032;&rdquo;&#29366;&#24577;&#12290;<\/p><h2>&#27491;&#22312;&#27979;&#35797;&#40664;&#35748;&#35774;&#32622;&#12290;<\/h2><p>&#37325;&#35201;&#30340;&#26159;&#35201;&#32534;&#20889;&#27979;&#35797;&#26469;&#39564;&#35777;&#40664;&#35748;&#20540;&#30340;&#34892;&#20026;&#26159;&#21542;&#27491;&#30830;&#65292;&#29305;&#21035;&#26159;&#22312;&#22788;&#29702;&#20851;&#38190;&#19994;&#21153;&#36923;&#36753;&#26102;&#23588;&#20026;&#37325;&#35201;&#12290;&#20351;&#29992;PHPUnit&#26469;&#30830;&#20445;&#40664;&#35748;&#20540;&#34987;&#35774;&#32622;&#20026;&#39044;&#26399;&#30340;&#20540;&#12290;<\/p><pre><code>public function testUserDefaultSignupDate()\n{\n    $user = new User();\n    $this-&gt;assertEquals(new DateTime(), $user-&gt;getSignupDate());\n}\n<\/code><\/pre><h2>&#38543;&#30528;&#26102;&#38388;&#30340;&#25512;&#31227;&#65292;&#22788;&#29702;&#21464;&#21270;&#12290;<\/h2><p>&#38543;&#30528;&#24744;&#30340;&#24212;&#29992;&#21457;&#23637;&#65292;&#24744;&#21487;&#33021;&#38656;&#35201;&#26356;&#25913;&#40664;&#35748;&#20540;&#12290;&#32500;&#25252;&#29256;&#26412;&#21270;&#36801;&#31227;&#24182;&#30830;&#20445;&#22312;&#23454;&#20307;&#26500;&#36896;&#20989;&#25968;&#20013;&#36827;&#34892;&#24517;&#35201;&#30340;&#20219;&#20309;&#26356;&#25913;&#65292;&#20197;&#30830;&#20445;&#22312;&#25972;&#20010;&#29983;&#21629;&#21608;&#26399;&#20869;&#24744;&#30340;&#24212;&#29992;&#31243;&#24207;&#34892;&#20026;&#19968;&#33268;&#12290;<\/p><h2>&#32467;&#35770;<\/h2><p>&#20351;&#29992;Doctrine&#30340;&#29305;&#24615;&#26469;&#35774;&#32622;&#21644;&#31649;&#29702;&#40664;&#35748;&#20540;&#38750;&#24120;&#31616;&#21333;&#65292;&#20294;&#22312;&#20219;&#20309;&#24212;&#29992;&#31243;&#24207;&#30340;&#25968;&#25454;&#24211;&#27169;&#24335;&#20013;&#37117;&#26159;&#24517;&#19981;&#21487;&#23569;&#30340;&#12290;&#40664;&#35748;&#20540;&#26426;&#21046;&#26159;&#25972;&#20010;Doctrine ORM&#20307;&#39564;&#30340;&#37325;&#35201;&#32452;&#25104;&#37096;&#20998;&#12290;&#36890;&#36807;&#22312;&#25968;&#25454;&#24211;&#32423;&#21035;&#21644;&#24212;&#29992;&#32423;&#21035;&#23450;&#20041;&#40664;&#35748;&#20540;&#65292;Doctrine&#20026;&#24320;&#21457;&#32773;&#25552;&#20379;&#20102;&#28789;&#27963;&#24615;&#21644;&#20415;&#21033;&#24615;&#65292;&#36825;&#19982;PHP&#24320;&#21457;&#23545;&#25968;&#25454;&#24211;&#23618;&#25277;&#35937;&#30340;&#26368;&#20339;&#23454;&#36341;&#30456;&#19968;&#33268;&#12290;<\/p><p>&#25317;&#25265;Doctrine&#40664;&#35748;&#20540;&#22788;&#29702;&#30340;&#24378;&#22823;&#21151;&#33021;&#65292;&#30830;&#20445;&#22312;PHP&#39033;&#30446;&#20013;&#30340;&#25968;&#25454;&#24211;&#21015;&#20855;&#26377;&#21453;&#26144;&#39046;&#22495;&#27169;&#22411;&#24847;&#22270;&#30340;&#21512;&#29702;&#40664;&#35748;&#20540;&#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;&#20351;&#29992; PHP &#21644; Doctrine ORM&#65288;&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#65289;&#26102;&#65292;&#35774;&#32622;&#21644;&#33719;&#21462;&#40664;&#35748;&#20540;&#23545;&#20110;&#30830;&#20445;&#25968;&#25454;&#19968;&#33268;&#24615;&#33267;&#20851;&#37325;&#35201;&#12290;Doctrine &#25552;&#20379;&#20102;&#20960;&#31181;&#26041;&#27861;&#26469;&#23450;&#20041;&#21644;&#31649;&#29702;&#36825;&#20123;&#40664;&#35748;&#20540;&#12290;<\/p>\n<h3>1. &#23450;&#20041;&#40664;&#35748;&#20540;<\/h3>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#23454;&#20307;&#31867;&#65292;&#24182;&#20026;&#38656;&#35201;&#40664;&#35748;&#20540;&#30340;&#23383;&#27573;&#28155;&#21152;&#23646;&#24615;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppEntity;\n\nuse DoctrineORMMapping as ORM;\nuse GedmoTimestampableTraitsTimestampableEntity;\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=255)\n     *\/\n    private $name;\n\n    \/**\n     * @ORMColumn(type=\"datetime\", nullable=true)\n     *\/\n    private $createdAt = null;\n\n    \/\/ ...&#20854;&#20182;&#23383;&#27573;...\n\n    public function getName(): string\n    {\n        return $this-&gt;name;\n    }\n\n    public function setName(string $name): void\n    {\n        $this-&gt;name = $name;\n    }\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#35774;&#32622;&#20102; <code>name<\/code> &#23383;&#27573;&#20026;&#24517;&#38656;&#19988;&#26377;&#40664;&#35748;&#20540;&#12290;&#22914;&#26524;&#27809;&#26377;&#25552;&#20379;&#20540;&#65292;&#21017;&#20250;&#33258;&#21160;&#22635;&#20805; <code>null<\/code>&#12290;<\/p>\n<h3>2. &#20351;&#29992; Doctrine ORM &#35774;&#32622;&#40664;&#35748;&#20540;<\/h3>\n<p>&#19968;&#26086;&#23450;&#20041;&#20102;&#23383;&#27573;&#65292;&#23601;&#21487;&#20197;&#36890;&#36807; <code>set()<\/code> &#26041;&#27861;&#23558;&#20540;&#35774;&#32622;&#21040;&#23454;&#20363;&#19978;&#65306;<\/p>\n<pre><code class=\"language-php\">$user = new User();\n$user-&gt;setName('John Doe');\necho $user-&gt;getName(); \/\/ &#36755;&#20986; 'John Doe'<\/code><\/pre>\n<p>&#22914;&#26524;&#22312;&#25968;&#25454;&#24211;&#25805;&#20316;&#20043;&#21069;&#27809;&#26377;&#35774;&#32622; <code>updatedAt<\/code> &#23383;&#27573;&#65292;&#37027;&#20040;&#23427;&#20063;&#20250;&#34987;&#35774;&#32622;&#20026;&#24403;&#21069;&#26102;&#38388;&#12290;<\/p>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20551;&#35774;&#25105;&#20204;&#35201;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#29992;&#25143;&#24182;&#23558;&#20854;&#20445;&#23384;&#21040;&#25968;&#25454;&#24211;&#65292;&#21487;&#20197;&#36825;&#26679;&#32534;&#20889;&#20195;&#30721;&#65306;<\/p>\n<pre><code class=\"language-php\">$user = new User();\n$user-&gt;setName('Jane Smith'); \/\/ &#35774;&#32622;&#21517;&#23383;\n$user-&gt;setCreatedAt(new DateTime()); \/\/ &#35774;&#32622;&#21019;&#24314;&#26102;&#38388;\n\n\/\/ &#35843;&#29992;save()&#26041;&#27861;&#20445;&#23384;&#29992;&#25143;\n$entityManager = $this-&gt;getDoctrine()-&gt;getManager();\n$entityManager-&gt;persist($user);\n$entityManager-&gt;flush();\n\n\/\/ &#29992;&#25143;&#29616;&#22312;&#24050;&#23384;&#22312;&#20110;&#25968;&#25454;&#24211;&#20013;<\/code><\/pre>\n<h3>&#24635;&#32467;<\/h3>\n<p>&#36890;&#36807;&#20197;&#19978;&#30340;&#26041;&#27861;&#65292;&#20320;&#21487;&#20197;&#26377;&#25928;&#22320;&#22312; Doctrine ORM &#20013;&#20351;&#29992;&#40664;&#35748;&#20540;&#12290;&#36825;&#26377;&#21161;&#20110;&#20445;&#25345;&#25968;&#25454;&#30340;&#19968;&#33268;&#24615;&#21644;&#23436;&#25972;&#24615;&#12290;&#35760;&#20303;&#65292;&#34429;&#28982;&#40664;&#35748;&#20540;&#21487;&#20197;&#24110;&#21161;&#36991;&#20813;&#38169;&#35823;&#65292;&#20294;&#23427;&#20204;&#19981;&#24212;&#35813;&#34987;&#35270;&#20026;&#21807;&#19968;&#30340;&#35299;&#20915;&#26041;&#26696;&#65292;&#22240;&#20026;&#27491;&#30830;&#30340;&#25968;&#25454;&#36755;&#20837;&#22987;&#32456;&#26159;&#26368;&#20339;&#23454;&#36341;&#30340;&#19968;&#37096;&#20998;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#26631;&#39064;&#65306;PHP Doctrine&#65306;&#20351;&#29992;&#40664;&#35748;&#20540;&#21019;&#24314;&#34920;&#21015; &#22312;&#038;#20351..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1139","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\/1139","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=1139"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1139"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1139"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1139"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}