{"id":1128,"date":"2025-06-12T13:41:11","date_gmt":"2025-06-12T05:41:11","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1128.html"},"modified":"2025-06-12T13:41:11","modified_gmt":"2025-06-12T05:41:11","slug":"symfony%e4%b8%8edoctrine%e4%b8%ad%e7%9a%84%e6%95%b0%e6%8d%ae%e8%bf%81%e7%a7%bb%ef%bc%9a%e5%ae%9e%e6%88%98%e6%8c%87%e5%8d%97","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1128.html","title":{"rendered":"Symfony\u4e0eDoctrine\u4e2d\u7684\u6570\u636e\u8fc1\u79fb\uff1a\u5b9e\u6218\u6307\u5357"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#26631;&#39064;&#65306;Symfony&#19982;Doctrine&#20013;&#30340;&#25968;&#25454;&#36801;&#31227;&#65306;&#23454;&#25112;&#25351;&#21335;<\/p>\n<p>&#22312;&#29616;&#20195;&#30340;Web&#24320;&#21457;&#20013;&#65292;&#25968;&#25454;&#24211;&#26159;&#23384;&#20648;&#21644;&#31649;&#29702;&#24212;&#29992;&#25968;&#25454;&#30340;&#37325;&#35201;&#24037;&#20855;&#12290;&#32780;&#25968;&#25454;&#36801;&#31227;&#65288;Data Migration&#65289;&#21017;&#26159;&#19968;&#31181;&#23558;&#26087;&#30340;&#25968;&#25454;&#26684;&#24335;&#36716;&#25442;&#20026;&#26032;&#30340;&#25968;&#25454;&#26684;&#24335;&#30340;&#36807;&#31243;&#12290;&#22312;Symfony&#26694;&#26550;&#20013;&#65292;&#20351;&#29992; Doctrine ORM &#36827;&#34892;&#25968;&#25454;&#36801;&#31227;&#26159;&#38750;&#24120;&#24120;&#35265;&#30340;&#20570;&#27861;&#12290;&#26412;&#25991;&#23558;&#24102;&#39046;&#22823;&#23478;&#20174;&#29702;&#35770;&#21040;&#23454;&#36341;&#65292;&#23398;&#20064;&#22914;&#20309;&#20351;&#29992; Symfony &#21644; Doctrine &#36827;&#34892;&#25968;&#25454;&#36801;&#31227;&#12290;<\/p>\n<h3>1. &#23433;&#35013;&#24517;&#35201;&#30340;&#20381;&#36182;<\/h3>\n<p>&#39318;&#20808;&#65292;&#30830;&#20445;&#20320;&#30340;&#39033;&#30446;&#24050;&#32463;&#23433;&#35013;&#20102; Symfony &#21644; Doctrine&#12290;&#20320;&#21487;&#20197;&#36890;&#36807; Composer &#26469;&#23433;&#35013;&#65306;<\/p>\n<pre><code class=\"language-bash\">composer require symfony\/framework-bundle doctrine\/orm<\/code><\/pre>\n<h3>2. &#21019;&#24314;&#23454;&#20307;&#31867;<\/h3>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#31616;&#21333;&#30340;&#29992;&#25143;&#34920; <code>users<\/code>&#65292;&#21253;&#21547;&#20197;&#19979;&#23383;&#27573;&#65306;<\/p>\n<ul>\n<li><code>id<\/code><\/li>\n<li><code>username<\/code><\/li>\n<li><code>email<\/code><\/li>\n<\/ul>\n<p>&#39318;&#20808;&#65292;&#21019;&#24314; <code>User<\/code> &#23454;&#20307;&#31867;&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppEntity;\n\nuse DoctrineORMMapping as ORM;\n\n\/**\n * @ORMEntity(repositoryClass=\"AppRepositoryUserRepository\")\n *\/\nclass User\n{\n    \/**\n     * @ORMId()\n     * @ORMGeneratedValue(strategy=\"AUTO\")\n     * @ORMColumn(type=\"integer\")\n     *\/\n    private $id;\n\n    \/**\n     * @ORMColumn(type=\"string\", length=255)\n     *\/\n    private $username;\n\n    \/**\n     * @ORMColumn(type=\"string\", length=255, unique=true)\n     *\/\n    private $email;\n\n    \/\/ Getters and Setters\n}<\/code><\/pre>\n<h3>3. &#21019;&#24314;&#36801;&#31227;&#25991;&#20214;<\/h3>\n<p>&#22312; <code>src\/Migrations<\/code> &#30446;&#24405;&#19979;&#65292;&#36816;&#34892;&#20197;&#19979;&#21629;&#20196;&#26469;&#29983;&#25104;&#21021;&#22987;&#30340;&#36801;&#31227;&#25991;&#20214;&#65306;<\/p>\n<pre><code class=\"language-bash\">php bin\/console make:migration<\/code><\/pre>\n<p>&#36825;&#23558;&#20250;&#22312; <code>src\/Migrations<\/code> &#30446;&#24405;&#19979;&#29983;&#25104;&#19968;&#20010;&#21517;&#20026; <code>Version000001_initial.php<\/code> &#30340;&#25991;&#20214;&#12290;&#36825;&#20010;&#25991;&#20214;&#21253;&#21547;&#20102;&#21021;&#22987;&#30340;&#25968;&#25454;&#24211;&#32467;&#26500;&#23450;&#20041;&#12290;<\/p>\n<h3>4. &#32534;&#20889;&#36801;&#31227;&#33050;&#26412;<\/h3>\n<p>&#25171;&#24320; <code>Version000001_initial.php<\/code> &#25991;&#20214;&#65292;&#24182;&#32534;&#20889;&#36801;&#31227;&#33050;&#26412;&#12290;&#20363;&#22914;&#65292;&#25105;&#20204;&#23558;&#28155;&#21152;&#19968;&#20123;&#40664;&#35748;&#20540;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nuse DoctrineDBALSchemaSchema;\nuse DoctrineMigrationsAbstractMigration;\n\nclass Version000001_initial extends AbstractMigration\n{\n    public function up(Schema $schema): void\n    {\n        \/\/ Add your migration code here\n        $this-&gt;addSql('CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255) NOT NULL, email VARCHAR(255) UNIQUE NOT NULL)');\n    }\n\n    public function down(Schema $schema): void\n    {\n        \/\/ This method should reverse whatever changes were made in the up() method.\n        $this-&gt;addSql('DROP TABLE users');\n    }\n}<\/code><\/pre>\n<h3>5. &#36816;&#34892;&#36801;&#31227;<\/h3>\n<p>&#36816;&#34892;&#36801;&#31227;&#20197;&#26356;&#26032;&#25968;&#25454;&#24211;&#65306;<\/p>\n<pre><code class=\"language-bash\">php bin\/console doctrine:migrate<\/code><\/pre>\n<p>&#36825;&#23558;&#20250;&#25191;&#34892;&#25152;&#26377;&#30340;&#36801;&#31227;&#25805;&#20316;&#65292;&#21253;&#25324;&#21019;&#24314;&#34920;&#21644;&#25554;&#20837;&#21021;&#22987;&#25968;&#25454;&#12290;<\/p>\n<h3>6. &#20351;&#29992;&#36801;&#31227;&#36827;&#34892;&#21319;&#32423;&#21644;&#22238;&#28378;<\/h3>\n<p>&#22914;&#26524;&#20320;&#38656;&#35201;&#23545;&#29616;&#26377;&#30340;&#25968;&#25454;&#36827;&#34892;&#20462;&#25913;&#25110;&#21024;&#38500;&#65292;&#21487;&#20197;&#20351;&#29992; <code>doctrine:migrate:up<\/code> &#21644; <code>doctrine:migrate:down<\/code> &#21629;&#20196;&#26469;&#23454;&#29616;&#12290;&#20363;&#22914;&#65292;&#22914;&#26524;&#20320;&#24819;&#21024;&#38500;&#26576;&#20010;&#21015;&#65292;&#21487;&#20197;&#20808;&#36816;&#34892; <code>doctrine:migrate:down<\/code>&#65292;&#28982;&#21518;&#32534;&#36753;&#36801;&#31227;&#25991;&#20214;&#24182;&#28155;&#21152;&#30456;&#24212;&#30340; SQL &#35821;&#21477;&#65292;&#26368;&#21518;&#20877;&#36816;&#34892; <code>doctrine:migrate:up<\/code>&#12290;<\/p>\n<h3>&#24635;&#32467;<\/h3>\n<p>&#36890;&#36807;&#20197;&#19978;&#27493;&#39588;&#65292;&#20320;&#21487;&#20197;&#22312; Symfony &#20013;&#20351;&#29992; Doctrine &#36827;&#34892;&#25968;&#25454;&#36801;&#31227;&#12290;&#36825;&#19981;&#20165;&#26377;&#21161;&#20110;&#20445;&#25345;&#25968;&#25454;&#24211;&#32467;&#26500;&#30340;&#19968;&#33268;&#24615;&#65292;&#36824;&#33021;&#26041;&#20415;&#22320;&#36827;&#34892;&#25968;&#25454;&#32500;&#25252;&#21644;&#21319;&#32423;&#12290;&#24076;&#26395;&#36825;&#31687;&#25991;&#31456;&#23545;&#20320;&#26377;&#25152;&#24110;&#21161;&#65281;<\/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>&#27010;&#36848;<\/h3><p>&#22312;Web&#24212;&#29992;&#24320;&#21457;&#30340;&#19990;&#30028;&#37324;&#65292;&#31649;&#29702;&#25968;&#25454;&#24211;&#27169;&#24335;&#30340;&#21464;&#21270;&#23545;&#20110;&#24212;&#29992;&#31243;&#24207;&#30340;&#25935;&#25463;&#24615;&#21644;&#31283;&#23450;&#24615;&#33267;&#20851;&#37325;&#35201;&#12290;Symfony&#65292;&#19968;&#20010;&#24378;&#22823;&#30340;PHP&#26694;&#26550;&#65292;&#19982;Doctrine&#65288;&#25968;&#25454;&#24211;&#25277;&#35937;&#23618;&#65289;&#19968;&#36215;&#25552;&#20379;&#20102;&#36731;&#26494;&#22788;&#29702;&#25968;&#25454;&#36801;&#31227;&#30340;&#26041;&#27861;&#12290;<\/p><p>&#25968;&#25454;&#36801;&#31227;&#28041;&#21450;&#23545;&#25968;&#25454;&#24211;&#27169;&#24335;&#36827;&#34892;&#26356;&#25913;&#65292;&#22914;&#28155;&#21152;&#25110;&#20462;&#25913;&#34920;&#12289;&#21015;&#21644;&#25968;&#25454;&#31867;&#22411;&#12290;&#36825;&#20123;&#26356;&#25913;&#23553;&#35013;&#22312;&ldquo;&#36801;&#31227;&rdquo;&#65288;migration&#65289;&#20013;&mdash;&mdash;&#23567;&#33050;&#26412;&#35814;&#32454;&#35828;&#26126;&#22914;&#20309;&#24212;&#29992;&#65288;up&#65289;&#25110;&#22238;&#28378;&#65288;down&#65289;&#29305;&#23450;&#30340;&#27169;&#24335;&#21464;&#26356;&#12290;<\/p><h3>&#35774;&#32622; Doctrine &#36941;&#21382;&#36801;&#31227;&#65288;Doctrine Migrations&#65289;<\/h3><p>&#39318;&#20808;&#65292;&#35831;&#30830;&#20445;&#24050;&#32463;&#22312;&#24744;&#30340;Symfony&#39033;&#30446;&#20013;&#23433;&#35013;&#20102;Doctrine Migrations&#24211;&#12290;&#22914;&#26524;&#27809;&#26377;&#65292;&#24744;&#21487;&#20197;&#20351;&#29992;&#20197;&#19979;&#21629;&#20196;&#36827;&#34892;&#23433;&#35013;&#65306;<\/p><pre><code>composer require doctrine\/doctrine-migrations-bundle<\/code><\/pre><p>&#19968;&#26086;&#23433;&#35013;&#23436;&#25104;&#65292;&#37197;&#32622;&#20320;&#30340;doctrine_migrations.yaml&#25991;&#20214;&#65306;<\/p><pre><code>doctrine_migrations:\n    migrations_paths:\n        'DoctrineMigrations': '%kernel.project_dir%\/src\/Migrations'\n    storage:\n        table_storage:\n            table_name: 'migration_versions'\n<\/code><\/pre><h3>&#21019;&#24314;&#24744;&#30340;&#31532;&#19968;&#20010;&#36801;&#31227;<\/h3><p>&#21019;&#24314;&#36801;&#31227;&#21487;&#20197;&#36890;&#36807;Symfony&#25511;&#21046;&#21488;&#23436;&#25104;&#65306;<\/p><pre><code>php bin\/console make:migration<\/code><\/pre><p>&#36825;&#23558;&#20250;&#22312;src\/Migrations&#30446;&#24405;&#19979;&#29983;&#25104;&#19968;&#20010;&#26032;&#30340;&#25991;&#20214;&#12290;&#35831;&#25171;&#24320;&#36801;&#31227;&#25991;&#20214;&#36827;&#34892;&#23457;&#26597;&#21644;&#21487;&#33021;&#30340;&#32534;&#36753;&#65292;&#20197;&#22312;&#36816;&#34892;&#36801;&#31227;&#20043;&#21069;&#20462;&#25913;&#33258;&#21160;&#29983;&#25104;&#30340;SQL&#26597;&#35810;&#12290;<\/p><h3>&#27491;&#22312;&#25191;&#34892;&#36801;&#31227;&#25805;&#20316;&#12290;<\/h3><p>&#20026;&#20102;&#24212;&#29992;&#25968;&#25454;&#24211;&#20013;&#30340;&#26356;&#25913;&#65292;&#35831;&#36816;&#34892;&#20197;&#19979;&#21629;&#20196;&#65306;<\/p><pre><code>php bin\/console doctrine:migrations:migrate<\/code><\/pre><p>&#20320;&#23558;&#34987;&#25552;&#31034;&#30830;&#35748;&#25805;&#20316;&#12290;&#19968;&#26086;&#30830;&#35748;&#65292;Doctrine &#23558;&#24212;&#29992;&#36825;&#20123;&#26356;&#25913;&#12290;<\/p><h3>&#22238;&#28378;&#36801;&#31227;&#25805;&#20316;&#12290;<\/h3><p>&#20196;&#20154;&#24778;&#35766;&#30340;&#26159;&#65292;&#21487;&#33021;&#26377;&#22330;&#26223;&#38656;&#35201;&#22238;&#28378;&#36801;&#31227;&#65306;<\/p><pre><code>php bin\/console doctrine:migrations:migrate 'prev'<\/code><\/pre><p>&#36825;&#20010;&#21629;&#20196;&#20250;&#22238;&#28378;&#26368;&#21518;&#24212;&#29992;&#30340;&#36801;&#31227;&#65292;&#30830;&#20445;&#20320;&#30340;&#27169;&#24335;&#23433;&#20840;&#22320;&#22238;&#36864;&#21040;&#20043;&#21069;&#30340;&#29366;&#24577;&#12290;<\/p><h3>&#20351;&#29992;fixture&#36827;&#34892;&#25968;&#25454;&#31649;&#29702;<\/h3><p>&#34429;&#28982;&#36801;&#31227;&#20250;&#35843;&#33410;&#34920;&#32467;&#26500;&#65292;&#20294;Doctrine&#30340;fixture&#22788;&#29702;&#23454;&#38469;&#30340;&#25968;&#25454;&#12290;&#23433;&#35013;&#23427;&#20351;&#29992;&#65306;<\/p><pre><code>composer require --dev doctrine\/doctrine-fixtures-bundle<\/code><\/pre><p>&#22312; src\/DataFixtures &#30446;&#24405;&#19979;&#21019;&#24314;&#19968;&#20010;fixture&#31867;&#21487;&#33021;&#20250;&#30475;&#36215;&#26469;&#20687;&#36825;&#26679;&#65306;<\/p><pre><code>namespace AppDataFixtures;\n\nuse DoctrineBundleFixturesBundleFixture;\nuse DoctrinePersistenceObjectManager;\n\nclass AppFixtures extends Fixture\n{\n    public function load(ObjectManager $manager)\n    {\n        \/\/ Your data fixtures loading logic goes here\n    }\n}\n<\/code><\/pre><h3>&#21152;&#36733;&#27604;&#36187;&#26085;&#31243;<\/h3><p>&#20026;&#20102;&#21152;&#36733;&#25968;&#25454;&#21040;&#25968;&#25454;&#24211;&#65292;&#35831;&#21442;&#38405;&#20197;&#19979;&#27493;&#39588;&#65306;<\/p><pre><code>php bin\/console doctrine:fixtures:load<\/code><\/pre><p>&#35760;&#24471;&#36816;&#34892;&#36825;&#20010;&#21629;&#20196;&#20250;&#28165;&#38500;&#29616;&#26377;&#30340;&#25968;&#25454;&#24182;&#37325;&#26032;&#21152;&#36733;fixture&#12290;<\/p><h3>&#29256;&#26412;&#25511;&#21046;&#22312;&#36801;&#31227;&#20013;&#30340;&#24212;&#29992;<\/h3><p>&#29256;&#26412;&#25511;&#21046;&#20320;&#30340;&#36801;&#31227;&#38750;&#24120;&#37325;&#35201;&#65306;<\/p><pre><code>git add src\/Migrations git commit -m 'Add migration for XYZ feature'<\/code><\/pre><p>&#36825;&#20010;&#36319;&#36394;&#21464;&#21270;&#24182;&#20419;&#36827;&#36328;&#24320;&#21457;&#22242;&#38431;&#30340;&#21327;&#20316;&#12290;<\/p><h3>&#36801;&#31227;&#36807;&#31243;&#30340;&#25552;&#31034;&#65306;&#30830;&#20445;&#19968;&#20010;&#24179;&#28369;&#30340;&#36807;&#31243;&#12290;<\/h3><p>&#37096;&#32626;&#36801;&#31227;&#26102;&#65292;&#23558;&#20854;&#19982;&#24212;&#29992;&#31243;&#24207;&#20195;&#30721;&#20998;&#24320;&#20197;&#20415;&#20110;&#24555;&#36895;&#23450;&#20301;&#38382;&#39064;&#12290;<\/p><p>&#20351;&#29992;&ldquo;dry-run&rdquo;&#36873;&#39033;&#26469;&#27169;&#25311;&#36801;&#31227;&#65292;&#32780;&#19981;&#23454;&#38469;&#36827;&#34892;&#20219;&#20309;&#26356;&#25913;&#12290;<\/p><p>&#22312;&#29983;&#20135;&#29615;&#22659;&#24212;&#29992;&#20043;&#21069;&#65292;&#22312;&#24320;&#21457;&#29615;&#22659;&#20013;&#20808;&#36827;&#34892;&#27979;&#35797;&#36801;&#31227;&#12290;<\/p><p>&#22312;&#36816;&#34892;&#36801;&#31227;&#20043;&#21069;&#65292;&#35831;&#21153;&#24517;&#22791;&#20221;&#24744;&#30340;&#25968;&#25454;&#24211;&#12290;<\/p><h3>&#32467;&#35770;<\/h3><p>Symfony &#21644; Doctrine &#31616;&#21270;&#20102;&#22797;&#26434;&#30340;&#27969;&#31243;&#65292;&#22914;&#25968;&#25454;&#36801;&#31227;&#20026;&#21487;&#31649;&#29702;&#30340;&#20219;&#21153;&#12290;&#19981;&#20165;&#30830;&#20445;&#29615;&#22659;&#20043;&#38388;&#30340;&#19968;&#33268;&#24615;&#65292;&#36824;&#40723;&#21169;&#22312;&#24212;&#29992;&#31243;&#24207;&#25968;&#25454;&#24211;&#35774;&#35745;&#19978;&#37319;&#29992;&#26368;&#20339;&#23454;&#36341;&#12290;&#20973;&#20511;&#36825;&#20123;&#24037;&#20855;&#30340;&#21147;&#37327;&#65292;&#24744;&#21487;&#20197;&#33258;&#20449;&#22320;&#20197;&#31934;&#30830;&#21644;&#36731;&#26494;&#30340;&#26041;&#24335;&#21457;&#23637;&#24744;&#30340;&#24212;&#29992;&#25968;&#25454;&#23618;&#12290;<\/p><p>&#27494;&#35013;&#36215;&#26469;&#65292;&#24744;&#24050;&#32463;&#36208;&#22312;&#20102;Symfony&#39033;&#30446;&#26377;&#25928;&#36801;&#31227;&#31649;&#29702;&#30340;&#36947;&#36335;&#19978;&#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<h3>&#25968;&#25454;&#36801;&#31227;&#65288;Migrations&#65289;&#22312; Symfony &#19982; Doctrine &#20013;&#30340;&#24212;&#29992;<\/h3>\n<p><strong>&#27010;&#36848;<\/strong><\/p>\n<p>&#22312;&#22823;&#22411;&#39033;&#30446;&#20013;&#65292;&#25968;&#25454;&#24211;&#21644;&#24212;&#29992;&#27169;&#22411;&#30340;&#21464;&#26356;&#38656;&#35201;&#20445;&#25345;&#19968;&#33268;&#24615;&#21644;&#21487;&#32500;&#25252;&#24615;&#12290;&#36890;&#36807;&#20351;&#29992;&#25968;&#25454;&#36801;&#31227;&#24037;&#20855;&#65288;&#22914; <code>migrate<\/code> &#24037;&#20855;&#65289;&#65292;&#21487;&#20197;&#33258;&#21160;&#21270;&#22320;&#23558;&#24212;&#29992;&#31243;&#24207;&#30340;&#26356;&#25913;&#24212;&#29992;&#20110;&#25968;&#25454;&#24211;&#12290;<\/p>\n<p><strong>Symfony &#30340; Migrations<\/strong><\/p>\n<p>&#22312; Symfony &#20013;&#65292;&#21487;&#20197;&#36890;&#36807;&#20351;&#29992; <code>doctrine-migrations<\/code> &#24211;&#26469;&#23454;&#29616;&#25968;&#25454;&#36801;&#31227;&#12290;&#39318;&#20808;&#30830;&#20445;&#23433;&#35013;&#20102; <code>doctrine-migrations<\/code> &#21644; <code>doctrine\/doctrine-bundle<\/code>&#65306;<\/p>\n<pre><code class=\"language-bash\">composer require doctrine\/doctrine-migrations<\/code><\/pre>\n<p>&#28982;&#21518;&#37197;&#32622;&#25968;&#25454;&#24211;&#39537;&#21160;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ app\/config\/packages\/doctrine.yaml\ndoctrine:\n    dbal:\n        driver:     pdo_mysql\n        host:       localhost\n        port:       3306\n        database:   your_database_name\n        username:   your_username\n        password:   your_password\n        options:    [\n            \/\/ MySQL specific configuration (if needed)\n            'charset' =&gt; 'utf8mb4',\n            'collation' =&gt; 'utf8mb4_unicode_ci',\n        ]<\/code><\/pre>\n<p>&#25509;&#19979;&#26469;&#26159;&#21019;&#24314;&#36801;&#31227;&#25991;&#20214;&#65306;<\/p>\n<ol>\n<li>\n<p><strong>&#23450;&#20041;&#34920;&#32467;&#26500;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-sql\">CREATE TABLE users (\n   id INT NOT NULL AUTO_INCREMENT,\n   name VARCHAR(255) NOT NULL,\n   email VARCHAR(255) NOT NULL UNIQUE,\n   PRIMARY KEY (id)\n);<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#25191;&#34892;&#36801;&#31227;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-php\">$this-&gt;addSql(\"\n  CREATE TABLE users (\n      id INT NOT NULL AUTO_INCREMENT,\n      name VARCHAR(255) NOT NULL,\n      email VARCHAR(255) NOT NULL UNIQUE,\n      PRIMARY KEY (id)\n  );\n\");<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#36801;&#31227;&#24212;&#29992;&#21040;&#25968;&#25454;&#24211;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-php\">$this-&gt;getEntityManager()-&gt;getConnection()\n   -&gt;executeUpdate(\"CREATE TABLE users ( ... )\");<\/code><\/pre>\n<\/li>\n<\/ol>\n<p><strong>Doctrine &#30340; Migrations<\/strong><\/p>\n<p>&#22312; Doctrine &#20013;&#65292;&#21487;&#20197;&#36890;&#36807;&#33258;&#21160;&#29983;&#25104;&#30340;&#36801;&#31227;&#33050;&#26412;&#31649;&#29702;&#25968;&#25454;&#36801;&#31227;&#12290;&#39318;&#20808;&#30830;&#35748;&#24050;&#23433;&#35013; <code>doctrine-migrations<\/code>&#65306;<\/p>\n<pre><code class=\"language-bash\">composer require doctrine\/orm<\/code><\/pre>\n<p>&#22312; <code>config\/migrations.php<\/code> &#25991;&#20214;&#20013;&#28155;&#21152;&#20197;&#19979;&#37197;&#32622;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nreturn [\n    \/\/ ...\n    'default' =&gt; [\n        'driver' =&gt; 'pdo_mysql',\n        'host' =&gt; 'localhost',\n        'port' =&gt; 3306,\n        'database' =&gt; 'your_database_name',\n        'username' =&gt; 'your_username',\n        'password' =&gt; 'your_password',\n        'options' =&gt; [ \/\/ Optional\n            PDO::ATTR_ERRMODE =&gt; PDO::ERRMODE_EXCEPTION,\n            PDO::ATTR_DEFAULT_FETCH_MODE =&gt; PDO::FETCH_ASSOC,\n            PDO::ATTR_EMULATE_PREPARES =&gt; false,\n        ],\n    ],\n];<\/code><\/pre>\n<p>&#21019;&#24314;&#36801;&#31227;&#25991;&#20214;&#65306;<\/p>\n<ul>\n<li>\n<p>&#22312; <code>src\/Migrations<\/code> &#30446;&#24405;&#19979;&#21019;&#24314; <code>up<\/code> &#21644; <code>down<\/code> &#25351;&#20196;&#12290;<\/p>\n<\/li>\n<li>\n<p>&#23450;&#20041;&#34920;&#32467;&#26500;&#65306;<\/p>\n<ul>\n<li>&#23545;&#20110;&#29992;&#25143;&#34920;&#65292;&#21487;&#20197;&#21019;&#24314;&#22914;&#19979;&#25351;&#20196;&#65306;\n<pre><code class=\"language-php\">public function up() {\n$this-&gt;createTable('users', [\n    'id' =&gt; $this-&gt;primaryKey(),\n    'name' =&gt; $this-&gt;string(),\n    'email' =&gt; $this-&gt;string()-&gt;unique(),\n]);\n}<\/code><\/pre><\/li>\n<\/ul>\n<\/li>\n<li>\n<p>&#25110;&#32773;&#65292;&#23545;&#20110;&#26356;&#22797;&#26434;&#30340;&#34920;&#32467;&#26500;&#65292;&#20363;&#22914;&#35746;&#21333;&#34920;&#65306;<\/p>\n<pre><code class=\"language-php\">public function up() {\n  $this-&gt;createTable('orders', [\n      'id' =&gt; $this-&gt;primaryKey(),\n      'user_id' =&gt; $this-&gt;integer(),\n      'product_id' =&gt; $this-&gt;integer(),\n      'quantity' =&gt; $this-&gt;integer(),\n      'price' =&gt; $this-&gt;decimal(),\n      'created_at' =&gt; $this-&gt;timestamp(),\n      'updated_at' =&gt; $this-&gt;timestamp(),\n  ]);\n}<\/code><\/pre>\n<\/li>\n<\/ul>\n<p>&#36816;&#34892;&#36801;&#31227;&#65306;<\/p>\n<pre><code class=\"language-php\">public function down() {\n    $this-&gt;dropTable('users');\n}<\/code><\/pre>\n<p>&#25110;&#32773;<\/p>\n<pre><code class=\"language-php\">public function down() {\n    $this-&gt;dropTable('orders');\n}<\/code><\/pre>\n<p>&#20197;&#19978;&#23601;&#26159; Symfony &#19982; Doctrine &#20013;&#30340;&#25968;&#25454;&#36801;&#31227;&#30340;&#22522;&#26412;&#27969;&#31243;&#12290;&#35831;&#27880;&#24847;&#26681;&#25454;&#23454;&#38469;&#39033;&#30446;&#38656;&#27714;&#35843;&#25972;&#37197;&#32622;&#21644;&#34920;&#32467;&#26500;&#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;Symfony&#19982;Doctrine&#20013;&#30340;&#25968;&#25454;&#36801;&#31227;&#65306;&#23454;&#25112;&#25351;&#038;#213..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1128","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\/1128","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=1128"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1128"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1128"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1128"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}