{"id":1133,"date":"2025-06-12T13:51:29","date_gmt":"2025-06-12T05:51:29","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1133.html"},"modified":"2025-06-12T13:51:29","modified_gmt":"2025-06-12T05:51:29","slug":"doctrine%e4%b8%ad%e7%9a%84%e7%ba%a7%e8%81%94%e5%88%a0%e9%99%a4%ef%bc%9a%e5%ae%9e%e7%94%a8%e6%8c%87%e5%8d%97","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1133.html","title":{"rendered":"Doctrine\u4e2d\u7684\u7ea7\u8054\u5220\u9664\uff1a\u5b9e\u7528\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>&#12298; Doctrine &#20013;&#30340;&#32423;&#32852;&#21024;&#38500;&#65306;&#23454;&#29992;&#25351;&#21335;&#12299;<\/p>\n<p>&#22312;&#25968;&#25454;&#24211;&#35774;&#35745;&#21644;&#24212;&#29992;&#24320;&#21457;&#20013;&#65292;&#32423;&#32852;&#21024;&#38500;&#65288;Cascade Delete&#65289;&#26159;&#19968;&#31181;&#24120;&#35265;&#30340;&#25968;&#25454;&#23436;&#25972;&#24615;&#25511;&#21046;&#26426;&#21046;&#12290;&#24403;&#29238;&#34920;&#20013;&#30340;&#26576;&#26465;&#35760;&#24405;&#34987;&#21024;&#38500;&#26102;&#65292;&#23376;&#34920;&#20013;&#30340;&#30456;&#20851;&#35760;&#24405;&#20063;&#20250;&#33258;&#21160;&#34987;&#21024;&#38500;&#12290;&#36825;&#23545;&#20110;&#30830;&#20445;&#25968;&#25454;&#30340;&#19968;&#33268;&#24615;&#21644;&#23436;&#25972;&#24615;&#33267;&#20851;&#37325;&#35201;&#12290;<\/p>\n<p>&#22312; Doctrine &#20013;&#65292;&#32423;&#32852;&#21024;&#38500;&#21487;&#20197;&#36890;&#36807; <code>@OneToMany<\/code> &#21644; <code>@ManyToOne<\/code> &#20851;&#31995;&#26469;&#23454;&#29616;&#12290;&#20197;&#19979;&#26159;&#19968;&#20123;&#20851;&#38190;&#28857;&#21644;&#31034;&#20363;&#20195;&#30721;&#65292;&#24110;&#21161;&#20320;&#22312; Doctrine &#20013;&#23454;&#29616;&#32423;&#32852;&#21024;&#38500;&#12290;<\/p>\n<h3>1. &#23450;&#20041;&#23454;&#20307;&#31867;<\/h3>\n<p>&#39318;&#20808;&#65292;&#23450;&#20041;&#20004;&#20010;&#23454;&#20307;&#31867;&#65306;<code>ParentEntity<\/code> &#21644; <code>ChildEntity<\/code>&#12290;<\/p>\n<pre><code class=\"language-php\">use DoctrineORMMapping as ORM;\n\n\/**\n * @ORMEntity(repositoryClass=\"AppRepositoryParentRepository\")\n *\/\nclass ParentEntity\n{\n    \/**\n     * @ORMId\n     * @ORMGeneratedValue(strategy=\"AUTO\")\n     * @ORMColumn(type=\"integer\")\n     *\/\n    private $id;\n\n    \/**\n     * @ORMOneToMany(targetEntity=\"ChildEntity\", mappedBy=\"parent\", cascade={\"remove\"})\n     *\/\n    private $children;\n\n    \/\/ Getters and Setters\n}\n\n\/**\n * @ORMEntity(repositoryClass=\"AppRepositoryChildRepository\")\n *\/\nclass ChildEntity\n{\n    \/**\n     * @ORMId\n     * @ORMGeneratedValue(strategy=\"AUTO\")\n     * @ORMColumn(type=\"integer\")\n     *\/\n    private $id;\n\n    \/**\n     * @ORMManyToOne(targetEntity=\"ParentEntity\", inversedBy=\"children\", cascade={\"remove\"})\n     * @ORMJoinColumn(name=\"parent_id\")\n     *\/\n    private $parent;\n\n    \/\/ Getters and Setters\n}<\/code><\/pre>\n<h3>2. &#37197;&#32622;&#20851;&#32852;&#20851;&#31995;<\/h3>\n<p>&#22312; <code>ParentEntity<\/code> &#31867;&#20013;&#20351;&#29992; <code>@OneToMany<\/code> &#20851;&#31995;&#65292;&#24182;&#25351;&#23450; <code>cascade={\"remove\"}<\/code> &#26469;&#34920;&#31034;&#24403; <code>ParentEntity<\/code> &#34987;&#21024;&#38500;&#26102;&#65292;&#23545;&#24212;&#30340; <code>ChildEntity<\/code> &#20063;&#24212;&#34987;&#21024;&#38500;&#12290;<\/p>\n<p>&#22312; <code>ChildEntity<\/code> &#31867;&#20013;&#20351;&#29992; <code>@ManyToOne<\/code> &#20851;&#31995;&#65292;&#24182;&#25351;&#23450; <code>inversedBy=\"children\"<\/code> &#26469;&#34920;&#31034; <code>ParentEntity<\/code> &#26159; <code>ChildEntity<\/code> &#30340;&#22806;&#38190;&#12290;<\/p>\n<h3>3. &#20351;&#29992;&#32423;&#32852;&#21024;&#38500;<\/h3>\n<p>&#22312;&#21019;&#24314;&#12289;&#26356;&#26032;&#25110;&#21024;&#38500; <code>ParentEntity<\/code> &#23454;&#20307;&#26102;&#65292;&#32423;&#32852;&#21024;&#38500;&#20250;&#33258;&#21160;&#22788;&#29702;&#30456;&#20851;&#30340; <code>ChildEntity<\/code> &#23454;&#20307;&#12290;<\/p>\n<pre><code class=\"language-php\">\/\/ &#21019;&#24314;&#19968;&#20010; ParentEntity &#23454;&#20363;\n$parent = new ParentEntity();\n\n\/\/ &#28155;&#21152;&#19968;&#20123; ChildEntity &#23454;&#20363;\nfor ($i = 0; $i &lt; 5; $i++) {\n    $child = new ChildEntity();\n    $child-&gt;setParent($parent);\n    $parent-&gt;addChildren($child);\n}\n\n\/\/ &#20445;&#23384; ParentEntity &#23454;&#20363;&#21040;&#25968;&#25454;&#24211;\n$entityManager-&gt;persist($parent);\n$entityManager-&gt;flush();\n\n\/\/ &#21024;&#38500; ParentEntity &#23454;&#20363;\n$entityManager-&gt;remove($parent);\n$entityManager-&gt;flush();<\/code><\/pre>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20197;&#19979;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;&#31034;&#20363;&#20195;&#30721;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312; Doctrine &#20013;&#23454;&#29616;&#32423;&#32852;&#21024;&#38500;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppEntity;\n\nuse DoctrineORMMapping as ORM;\n\n\/**\n * @ORMEntity(repositoryClass=\"AppRepositoryParentRepository\")\n *\/\nclass ParentEntity\n{\n    \/**\n     * @ORMId\n     * @ORMGeneratedValue(strategy=\"AUTO\")\n     * @ORMColumn(type=\"integer\")\n     *\/\n    private $id;\n\n    \/**\n     * @ORMOneToMany(targetEntity=\"ChildEntity\", mappedBy=\"parent\", cascade={\"remove\"})\n     *\/\n    private $children;\n\n    public function __construct()\n    {\n        $this-&gt;children = new DoctrineCommonCollectionsArrayCollection();\n    }\n\n    \/\/ Getters and Setters\n    public function getId(): int\n    {\n        return $this-&gt;id;\n    }\n\n    public function setId(int $id): void\n    {\n        $this-&gt;id = $id;\n    }\n\n    public function getChildren(): Collection\n    {\n        return $this-&gt;children;\n    }\n\n    public function addChild(ChildEntity $child)\n    {\n        $this-&gt;children[] = $child;\n        $child-&gt;setParent($this);\n    }\n}\n\n\/**\n * @ORMEntity(repositoryClass=\"AppRepositoryChildRepository\")\n *\/\nclass ChildEntity\n{\n    \/**\n     * @ORMId\n     * @ORMGeneratedValue(strategy=\"AUTO\")\n     * @ORMColumn(type=\"integer\")\n     *\/\n    private $id;\n\n    \/**\n     * @ORMManyToOne(targetEntity=\"ParentEntity\", inversedBy=\"children\", cascade={\"remove\"})\n     * @ORMJoinColumn(name=\"parent_id\")\n     *\/\n    private $parent;\n\n    public function __construct()\n    {\n        $this-&gt;parent = null;\n    }\n\n    \/\/ Getters and Setters\n    public function getId(): int\n    {\n        return $this-&gt;id;\n    }\n\n    public function setId(int $id): void\n    {\n        $this-&gt;id = $id;\n    }\n\n    public function getParent(): ?ParentEntity\n    {\n        return $this-&gt;parent;\n    }\n\n    public function setParent(?ParentEntity $parent): void\n    {\n        $this-&gt;parent = $parent;\n    }\n}\n\n\/\/ &#22312;&#25511;&#21046;&#22120;&#25110;&#20854;&#20182;&#26381;&#21153;&#20013;&#20351;&#29992;\n$entityManager = $this-&gt;getDoctrine()-&gt;getManager();\n\n\/\/ &#21019;&#24314;&#19968;&#20010;&#26032;&#30340; ParentEntity &#23454;&#20363;\n$parent = new ParentEntity();\n\n\/\/ &#28155;&#21152;&#19968;&#20123; ChildEntity &#23454;&#20363;\nfor ($i = 0; $i &lt; 5; $i++) {\n    $child = new ChildEntity();\n    $child-&gt;setParent($parent);\n    $parent-&gt;addChild($child);\n}\n\n\/\/ &#20445;&#23384; ParentEntity &#23454;&#20363;&#21040;&#25968;&#25454;&#24211;\n$entityManager-&gt;persist($parent);\n$entityManager-&gt;flush();\n\n\/\/ &#21024;&#38500; ParentEntity &#23454;&#20363;\n$entityManager-&gt;remove($parent);\n$entityManager-&gt;flush();\n?&gt;<\/code><\/pre>\n<p>&#36890;&#36807;&#20197;&#19978;&#27493;&#39588;&#65292;&#20320;&#21487;&#20197;&#36731;&#26494;&#22320;&#22312; Doctrine &#20013;&#23454;&#29616;&#32423;&#32852;&#21024;&#38500;&#21151;&#33021;&#12290;&#36825;&#19981;&#20165;&#25552;&#39640;&#20102;&#25968;&#25454;&#30340;&#19968;&#33268;&#24615;&#65292;&#36824;&#31616;&#21270;&#20102;&#25968;&#25454;&#24211;&#25805;&#20316;&#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>&#22312;&#22788;&#29702;&#22797;&#26434;&#25968;&#25454;&#24211;&#26102;&#65292;&#26377;&#25928;&#31649;&#29702;&#30456;&#20851;&#23454;&#20307;&#29983;&#21629;&#21608;&#26399;&#30340;&#20219;&#21153;&#24448;&#24448;&#26159;&#19968;&#39033;&#20855;&#26377;&#25361;&#25112;&#24615;&#30340;&#20219;&#21153;&#65292;&#29305;&#21035;&#26159;&#22312;&#21024;&#38500;&#25805;&#20316;&#26041;&#38754;&#12290;Doctrine &#26159;&#19968;&#20010;&#27969;&#34892;&#30340;PHP&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#65288;ORM&#65289;&#24211;&#20043;&#19968;&#65292;&#23427;&#25552;&#20379;&#20102;&#19968;&#20010;&#24378;&#22823;&#30340;&#26694;&#26550;&#26469;&#22788;&#29702;&#36825;&#31867;&#22330;&#26223;&#65292;&#36890;&#36807;&#20351;&#29992;&ldquo;Cascade Deletes&rdquo;&#27010;&#24565;&#36827;&#34892;&#31649;&#29702;&#12290;&#22312;&#36825;&#31687;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#23558;&#28145;&#20837;&#25506;&#35752;Doctrine&#20013;&#30340;Cascade Delete&#26426;&#21046;&#65292;&#24182;&#23398;&#20064;&#22914;&#20309;&#22312;&#24744;&#30340;PHP&#24212;&#29992;&#31243;&#24207;&#20013;&#21033;&#29992;Symfony&#36827;&#34892;&#23454;&#38469;&#24212;&#29992;&#12290;<\/p><h2>&#29702;&#35299;&#32423;&#32852;&#21024;&#38500;<\/h2><p>&#32423;&#32852;&#21024;&#38500;&#33258;&#21160;&#25191;&#34892;&#30456;&#20851;&#25968;&#25454;&#24211;&#23454;&#20307;&#30340;&#21024;&#38500;&#36807;&#31243;&#12290;&#24403;&#20320;&#31227;&#38500;&#19968;&#20010;&#23545;&#35937;&#26102;&#65292;&#24102;&#26377;&#32423;&#32852;&#21024;&#38500;&#36873;&#39033;&#30340;&#20219;&#20309;&#20851;&#32852;&#23545;&#35937;&#20063;&#23558;&#34987;&#21024;&#38500;&#65292;&#20197;&#30830;&#20445;&#25968;&#25454;&#30340;&#19968;&#33268;&#24615;&#21644;&#23436;&#25972;&#24615;&#12290;&#22312;Doctrine&#20013;&#65292;&#36825;&#31181;&#34892;&#20026;&#36890;&#36807;&#27880;&#35299;&#12289;YAML&#25110;XML&#26144;&#23556;&#22312;&#23454;&#20307;&#23450;&#20041;&#20869;&#36827;&#34892;&#25511;&#21046;&#12290;<\/p><h2>&#21021;&#22987;&#35774;&#32622;<\/h2><p>&#22312;&#24320;&#22987;&#31034;&#20363;&#20043;&#21069;&#65292;&#35831;&#30830;&#20445;&#24744;&#24050;&#32463;&#35774;&#32622;&#20102;&#19968;&#20010;&#21253;&#21547;Doctrine&#30340;Symfony&#39033;&#30446;&#65306;<\/p><pre><code>composer create-project symfony\/skeleton your-project-name\ncd your-project-name\ncomposer require orm<\/code><\/pre><p>&#25509;&#19979;&#26469;&#65292;&#21019;&#24314;&#19968;&#20010;&#31616;&#21333;&#30340;&#25968;&#25454;&#24211;&#27169;&#24335;&#65292;&#20854;&#20013;&#21253;&#21547;&#20004;&#20010;&#23454;&#20307;&#65292;&#24182;&#19988;&#23427;&#20204;&#20043;&#38388;&#23384;&#22312;&#19968;&#23545;&#22810;&#30340;&#20851;&#31995;&#12290;&#20363;&#22914;&#65292;&#19968;&#20010;&#20154;&#21487;&#20197;&#25317;&#26377;&#22810;&#20010;&#22320;&#22336;&#12290;<code>Category<\/code>&#23454;&#20307;&#21644;&#19968;&#20010;<code>Product<\/code>&#27599;&#20010;&#31867;&#21035;&#37117;&#26377;&#22810;&#20010;&#20135;&#21697;&#65306;<\/p><pre><code>\/* src\/Entity\/Category.php *\/\nnamespace AppEntity;\n\nuse DoctrineORMMapping as ORM;\n\n\/**\n * @ORMEntity\n *\/\nclass Category\n{\n    ...\n    \/**\n     * @ORMOneToMany(targetEntity=\"Product\", mappedBy=\"category\", cascade={\"remove\"})\n     *\/\n    private $products;\n\n    \/\/ other fields and methods\n}\n\n\/* src\/Entity\/Product.php *\/\nnamespace AppEntity;\n\nuse DoctrineORMMapping as ORM;\n\n\/**\n * @ORMEntity\n *\/\nclass Product\n{\n    ...\n    \/**\n     * @ORMManyToOne(targetEntity=\"Category\", inversedBy=\"products\")\n     *\/\n    private $category;\n\n    \/\/ other fields and methods\n}<\/code><\/pre><p>&#35831;&#27880;&#24847;&#12290;<code>cascade={\"remove\"}<\/code>&#21442;&#19982;<code>Category<\/code>&#23454;&#20307;&#30340;<code>$products<\/code>&#23646;&#24615;&#65306;&#36825;&#21578;&#35785;Doctrine&#21024;&#38500;&#25152;&#26377;&#20851;&#32852;&#30340;&#12290;<code>Product<\/code>&#24403;&#19968;&#20010; entity &#26102;<code>Category<\/code>&#23454;&#20307;&#27491;&#22312;&#34987;&#21024;&#38500;&#12290;<\/p><h2>&#23454;&#26045;&#32423;&#32852;&#21024;&#38500;&#25805;&#20316;&#12290;<\/h2><p>&#20026;&#20102;&#35828;&#26126;Cascade&#21024;&#38500;&#30340;&#20351;&#29992;&#26041;&#27861;&#65292;&#35753;&#25105;&#20204;&#21019;&#24314;&#19968;&#20010;&#25511;&#21046;&#22120;&#26041;&#27861;&#26469;&#21024;&#38500;&#31867;&#21035;&#21450;&#20854;&#25152;&#26377;&#20851;&#32852;&#30340;&#20135;&#21697;&#65306;<\/p><pre><code>\/* src\/Controller\/CategoryController.php *\/\nnamespace AppController;\n\nuse AppEntityCategory;\nuse DoctrineORMEntityManagerInterface;\nuse SymfonyComponentHttpFoundationResponse;\nuse SymfonyComponentRoutingAnnotationRoute;\n\nclass CategoryController\n{\n    \/**\n     * @Route(\"\/category\/delete\/{id}\", name=\"delete_category\")\n     *\/\n    public function deleteCategory($id, EntityManagerInterface $entityManager):\n         Response\n    {\n        $category = $entityManager-&gt;getRepository(Category::class)-&gt;find($id);\n\n        if ($category) {\n            $entityManager-&gt;remove($category);\n            $entityManager-&gt;flush();\n\n            return new Response('Category and all related products have been deleted.');\n        }\n\n        return new Response('Category not found.');\n    }\n}<\/code><\/pre><p>&#24403;HTTP&#35831;&#27714;&#21040;&#36798;&#26102;&#65292;<code>\/category\/delete\/{id}<\/code>&#36335;&#30001;&#65292;Doctrine &#20250;&#25191;&#34892;&#19968;&#31995;&#21015;&#30340; SQL &#21024;&#38500;&#21629;&#20196;&#65306;&#19968;&#20010;&#29992;&#20110;&#20998;&#31867;&#65292;&#28982;&#21518;&#26159;&#38024;&#23545;&#27599;&#20010;&#30456;&#20851;&#20135;&#21697;&#30340;&#39069;&#22806;&#21629;&#20196;&#12290;<\/p><h2>&#26368;&#20339;&#23454;&#36341;&#21644;&#32771;&#34385;&#22240;&#32032;<\/h2><p>&#20351;&#29992;&#32423;&#32852;&#21024;&#38500;&#21487;&#20197;&#24456;&#26041;&#20415;&#65292;&#20294;&#38656;&#35201;&#35880;&#24910;&#25805;&#20316;&#12290;&#20197;&#19979;&#26159;&#38656;&#35201;&#27880;&#24847;&#30340;&#19968;&#20123;&#26368;&#20339;&#23454;&#36341;&#21644;&#32771;&#34385;&#20107;&#39033;&#65306;<\/p><p>&#36719;&#21024;&#38500;&#65306;&#26377;&#26102;&#20351;&#29992;&#36719;&#21024;&#38500;&#31574;&#30053;&#26356;&#20026;&#26126;&#26234;&#65292;&#21363;&#21482;&#26631;&#35760;&#23454;&#20307;&#20026;&#24050;&#31227;&#38500;&#65292;&#32780;&#19981;&#26159;&#29289;&#29702;&#21024;&#38500;&#25968;&#25454;&#24211;&#20013;&#30340;&#34892;&#12290;&#36825;&#20801;&#35768;&#25968;&#25454;&#24674;&#22797;&#21644;&#23457;&#35745;&#36319;&#36394;&#12290;<\/p><p>&#24615;&#33021;&#24433;&#21709;&#65306;&#25209;&#37327;&#21024;&#38500;&#25805;&#20316;&#21487;&#33021;&#20250;&#38145;&#23450;&#34920;&#24182;&#20943;&#24930;&#24212;&#29992;&#31243;&#24207;&#30340;&#36895;&#24230;&#12290;&#24314;&#35758;&#27979;&#35797;&#24615;&#33021;&#65292;&#21516;&#26102;&#32771;&#34385;&#37319;&#29992;&#26356;&#39640;&#25928;&#30340;&#25209;&#22788;&#29702;&#21024;&#38500;&#31574;&#30053;&#26469;&#22788;&#29702;&#22823;&#37327;&#25968;&#25454;&#38598;&#12290;<\/p><p>&#28389;&#29992;&#21024;&#38500;&#65306;&#21482;&#22312;&#19994;&#21153;&#36923;&#36753;&#19978;&#30495;&#27491;&#26377;&#24517;&#35201;&#26102;&#25165;&#20351;&#29992;&#32423;&#32852;&#21024;&#38500;&#12290;&#27599;&#21024;&#38500;&#19968;&#20010;&#20851;&#31995;&#37117;&#21487;&#33021;&#23548;&#33268;&#24847;&#22806;&#30340;&#25209;&#37327;&#21024;&#38500;&#12290;<\/p><p>&#25968;&#25454;&#24211;&#32422;&#26463;&#65306;&#22312;&#24744;&#30340;&#25968;&#25454;&#24211;&#26550;&#26500;&#20013;&#65292;&#19982;&#22806;&#38190;&#32422;&#26463;&#30456;&#32467;&#21512;&#20351;&#29992;&ldquo;&#21024;&#38500;&rdquo;&#65288;cascade&#65289;&#21024;&#38500;&#26469;&#32500;&#25252;&#25968;&#25454;&#23436;&#25972;&#24615;&#12290;<\/p><h2>&#22788;&#29702;&#24322;&#24120;<\/h2><p>&#22312;&#38656;&#35201;&#20445;&#30041;&#30456;&#20851;&#23454;&#20307;&#30340;&#24773;&#20917;&#19979;&#65292;&#23581;&#35797;&#21024;&#38500;&#29238;&#23454;&#20307;&#26102;&#65292;Doctrine &#20250;&#25243;&#20986;&#24322;&#24120;&#12290;&#22987;&#32456;&#22788;&#29702;&#28508;&#22312;&#30340;&#24322;&#24120;&#20197;&#38450;&#27490;&#24212;&#29992;&#31243;&#24207;&#23849;&#28291;&#65306;<\/p><pre><code>use DoctrineORMEntityNotFoundException;\n\n\/\/ Inside your delete method\ntry {\n    if ($category) {\n        $entityManager-&gt;remove($category);\n        $entityManager-&gt;flush();\n    }\n} catch (EntityNotFoundException $e) {\n    \/\/ Logic to handle the exception\n}<\/code><\/pre><h2>&#32467;&#35770;<\/h2><p>&#32423;&#32852;&#21024;&#38500;&#26159;Doctrine&#30340;&#24378;&#22823;&#21151;&#33021;&#65292;&#26377;&#21161;&#20110;&#32500;&#25252;&#25968;&#25454;&#24211;&#30340;&#19968;&#33268;&#24615;&#65292;&#24182;&#31616;&#21270;&#22312;Symfony&#24212;&#29992;&#31243;&#24207;&#20013;&#30340;&#21024;&#38500;&#36923;&#36753;&#12290;&#28982;&#32780;&#65292;&#23427;&#24212;&#35813;&#35880;&#24910;&#20351;&#29992;&#21644;&#36127;&#36131;&#20219;&#22320;&#22788;&#29702;&#12290;&#23454;&#36341;&#20013;&#65292;&#35831;&#30830;&#20445;&#24744;&#24050;&#32463;&#21046;&#23450;&#20102;&#22791;&#20221;&#31574;&#30053;&#65292;&#24182;&#19988;&#32771;&#34385;&#20102;&#32423;&#32852;&#21024;&#38500;&#23545;&#19994;&#21153;&#36923;&#36753;&#12289;&#24615;&#33021;&#21644;&#25968;&#25454;&#23436;&#25972;&#24615;&#30340;&#24433;&#21709;&#12290;&#26377;&#20102;&#36825;&#20123;&#35265;&#35299;&#65292;&#29616;&#22312;&#24744;&#21487;&#20197;&#26377;&#25928;&#22320;&#22312;Doctrine&#39537;&#21160;&#30340;Symfony&#39033;&#30446;&#20013;&#23454;&#29616;&#32423;&#32852;&#21024;&#38500;&#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; Doctrine ORM&#65288;Object-Relational Mapping&#65289;&#36827;&#34892;&#25968;&#25454;&#24211;&#25805;&#20316;&#26102;&#65292;&#32423;&#32852;&#21024;&#38500;&#26159;&#19968;&#31181;&#24120;&#35265;&#30340;&#25968;&#25454;&#22788;&#29702;&#26041;&#24335;&#65292;&#23427;&#20801;&#35768;&#20320;&#22312;&#21024;&#38500;&#19968;&#26465;&#35760;&#24405;&#30340;&#21516;&#26102;&#65292;&#33258;&#21160;&#21024;&#38500;&#20851;&#32852;&#30340;&#20854;&#20182;&#35760;&#24405;&#12290;&#36825;&#23545;&#20110;&#23454;&#29616;&#26356;&#22797;&#26434;&#30340;&#19994;&#21153;&#36923;&#36753;&#38750;&#24120;&#26377;&#29992;&#65292;&#20363;&#22914;&#29992;&#25143;&#27880;&#20876;&#21644;&#30331;&#24405;&#26102;&#38656;&#35201;&#39564;&#35777;&#23494;&#30721;&#26159;&#21542;&#27491;&#30830;&#12290;<\/p>\n<h3>&#20160;&#20040;&#26159;&#32423;&#32852;&#21024;&#38500;&#65311;<\/h3>\n<p>&#32423;&#32852;&#21024;&#38500;&#26159;&#25351;&#24403;&#24744;&#20174;&#19968;&#20010;&#34920;&#20013;&#21024;&#38500;&#34892;&#26102;&#65292;&#20250;&#35302;&#21457;&#23545;&#19982;&#20854;&#26377;&#20851;&#31995;&#30340;&#25152;&#26377;&#34892;&#30340;&#21024;&#38500;&#12290;&#25442;&#21477;&#35805;&#35828;&#65292;&#22914;&#26524;&#19968;&#20010;&#23454;&#20307;&#20381;&#36182;&#20110;&#21478;&#19968;&#20010;&#23454;&#20307;&#65288;&#27604;&#22914;&#19968;&#20010;&#29992;&#25143;&#30340;&#36134;&#25143;&#20381;&#36182;&#20110;&#35813;&#29992;&#25143;&#30340;&#35282;&#33394;&#65289;&#65292;&#37027;&#20040;&#24403;&#29992;&#25143;&#34987;&#21024;&#38500;&#26102;&#65292;&#25152;&#26377;&#30456;&#20851;&#30340;&#35282;&#33394;&#20063;&#20250;&#19968;&#36215;&#34987;&#21024;&#38500;&#12290;<\/p>\n<h3>&#22312; Doctrine &#20013;&#23454;&#29616;&#32423;&#32852;&#21024;&#38500;<\/h3>\n<ol>\n<li>\n<p><strong>&#21019;&#24314;&#23454;&#20307;&#31867;<\/strong><\/p>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#19982;&#25968;&#25454;&#24211;&#34920;&#30456;&#23545;&#24212;&#30340;&#23454;&#20307;&#31867;&#12290;&#36825;&#20010;&#31867;&#24212;&#35813;&#32487;&#25215;&#33258; <code>Entity<\/code> &#31867;&#65292;&#24182;&#30830;&#20445;&#20854;&#23646;&#24615;&#26159;&#34920;&#20013;&#30340;&#23383;&#27573;&#65306;<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"language-php\">use DoctrineORMMapping as ORM;\n\n\/**\n * User entity.\n *\/\n#[ORMEntity]\nclass User extends AbstractUser\n{\n    \/\/ ...\n}<\/code><\/pre>\n<ol start=\"2\">\n<li>\n<p><strong>&#23450;&#20041;&#26144;&#23556;&#35268;&#21017;<\/strong><\/p>\n<p>&#20351;&#29992; <code>@Mapping<\/code> &#27880;&#35299;&#26469;&#23450;&#20041;&#26144;&#23556;&#35268;&#21017;&#12290;&#36825;&#36890;&#24120;&#28041;&#21450;&#23558;&#34920;&#20013;&#30340;&#23383;&#27573;&#26144;&#23556;&#21040;&#23454;&#20307;&#31867;&#30340;&#23646;&#24615;&#19978;&#65306;<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"language-php\">use DoctrineCommonCollectionsArrayCollection;\nuse DoctrineORMMapping as ORM;\n\n#[ORMEntity]\nclass User\n{\n    #[ORMId]\n    #[ORMGeneratedValue]\n    #[ORMColumn(type: 'integer')]\n    private $id;\n\n    #[ORMManyToMany(targetEntity: Role::class, inversedBy: 'users')]\n    private $roles;\n\n    \/\/ ...\n\n    public function getRoles(): ArrayCollection\n    {\n        return $this-&gt;roles;\n    }\n}<\/code><\/pre>\n<ol start=\"3\">\n<li>\n<p><strong>&#21551;&#29992;&#32423;&#32852;&#21024;&#38500;<\/strong><\/p>\n<p>&#29616;&#22312;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#28155;&#21152; <code>@Cascade<\/code> &#27880;&#35299;&#26469;&#21551;&#29992;&#32423;&#32852;&#21024;&#38500;&#12290;&#36825;&#21578;&#35785; Doctrine &#22312;&#21024;&#38500;&#29992;&#25143;&#26102;&#65292;&#20063;&#20250;&#21516;&#26102;&#21024;&#38500;&#29992;&#25143;&#30340;&#20851;&#32852;&#35282;&#33394;&#65306;<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"language-php\">use DoctrineORMMapping as ORM;\n\n#[ORMEntity]\nclass User\n{\n    #[ORMId]\n    #[ORMGeneratedValue]\n    #[ORMColumn(type: 'integer')]\n    private $id;\n\n    #[ORMOneToMany(mappedBy: 'user', targetEntity: Role::class)]\n    private $roles;\n\n    \/\/ ...\n\n    public function setRoles(array $roles)\n    {\n        $this-&gt;roles = new ArrayCollection();\n        foreach ($roles as $role) {\n            $this-&gt;addRole($role);\n        }\n\n        return $this;\n    }\n\n    public function addRole(Role $role): self\n    {\n        if (!$this-&gt;roles-&gt;contains($role)) {\n            $this-&gt;roles[] = $role;\n        }\n\n        return $this;\n    }\n\n    public function removeRole(Role $role): self\n    {\n        $this-&gt;roles-&gt;removeElement($role);\n\n        return $this;\n    }\n}<\/code><\/pre>\n<ol start=\"4\">\n<li>\n<p><strong>&#25191;&#34892;&#32423;&#32852;&#21024;&#38500;<\/strong><\/p>\n<p>&#24403;&#20320;&#24819;&#35201;&#21024;&#38500;&#19968;&#20010;&#29992;&#25143;&#26102;&#65292;&#21487;&#20197;&#35843;&#29992; <code>$user-&gt;delete()<\/code> &#26041;&#27861;&#65292;&#24182;&#20256;&#20837;&#19968;&#20010;&#22238;&#35843;&#20989;&#25968;&#26469;&#22788;&#29702;&#21024;&#38500;&#36807;&#31243;&#20013;&#30340;&#20219;&#20309;&#39069;&#22806;&#25805;&#20316;&#65306;<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"language-php\">$user = $em-&gt;getRepository(User::class)-&gt;find(1); \/\/ &#20551;&#35774;&#29992;&#25143;ID&#20026;1\n\nif ($user) {\n    $em-&gt;remove($user);\n    $em-&gt;flush(); \/\/ &#26356;&#26032;&#25968;&#25454;&#24211;&#29366;&#24577;\n}<\/code><\/pre>\n<ol start=\"5\">\n<li>\n<p><strong>&#27979;&#35797;&#32423;&#32852;&#21024;&#38500;<\/strong><\/p>\n<p>&#35201;&#26816;&#26597;&#32423;&#32852;&#21024;&#38500;&#26159;&#21542;&#25353;&#39044;&#26399;&#24037;&#20316;&#65292;&#21487;&#20197;&#22312;&#27979;&#35797;&#29615;&#22659;&#20013;&#36816;&#34892;&#19968;&#20123;&#20551;&#35774;&#24615;&#25805;&#20316;&#12290;&#20363;&#22914;&#65292;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#29992;&#25143;&#24182;&#23581;&#35797;&#23558;&#20854;&#21024;&#38500;&#65292;&#28982;&#21518;&#26597;&#30475;&#29992;&#25143;&#21450;&#20854;&#20851;&#32852;&#30340;&#35282;&#33394;&#26159;&#21542;&#20063;&#34987;&#21024;&#38500;&#20102;&#12290;<\/p>\n<\/li>\n<\/ol>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20197;&#19979;&#26159;&#19968;&#20010;&#31616;&#21333;&#30340;&#31034;&#20363;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#20351;&#29992; Doctrine ORM &#23454;&#29616;&#32423;&#32852;&#21024;&#38500;&#65306;<\/p>\n<pre><code class=\"language-php\">use DoctrineORMEntityManagerInterface;\nuse DoctrineORMMapping as ORM;\nuse DoctrineCommonCollectionsArrayCollection;\n\n#[ORMEntity]\nclass User\n{\n    #[ORMId]\n    #[ORMGeneratedValue]\n    #[ORMColumn(type: 'integer')]\n    private $id;\n\n    #[ORMOneToOne(mappedBy: 'user', cascade: ['persist', 'remove'])]\n    private $profile;\n\n    \/\/ ...\n}\n\n\/\/ &#27979;&#35797;&#32423;&#32852;&#21024;&#38500;\n$entityManager = EntityManager::createEntityManager();\n\n\/\/ &#21019;&#24314;&#29992;&#25143;&#24182;&#35774;&#32622;&#20854;&#20851;&#32852;&#30340;&#35282;&#33394;\n$user = new User();\n$user-&gt;setProfile(new Profile());\n$user-&gt;addRole('ROLE_USER');\n$user-&gt;save();\n\n\/\/ &#21024;&#38500;&#29992;&#25143;\n$user-&gt;delete(function (User $user) use (&amp;$entityManager) {\n    $entityManager-&gt;remove($user);\n});\n\n\/\/ &#26816;&#26597;&#21024;&#38500;&#21518;&#30340;&#29992;&#25143;&#26159;&#21542;&#24050;&#34987;&#21024;&#38500;\n$entityManager-&gt;refresh($user);<\/code><\/pre>\n<p>&#20197;&#19978;&#23601;&#26159;&#20351;&#29992; Doctrine ORM &#23454;&#29616;&#32423;&#32852;&#21024;&#38500;&#30340;&#22522;&#26412;&#26041;&#27861;&#12290;&#36825;&#31181;&#26041;&#27861;&#22312;&#35768;&#22810;&#23454;&#38469;&#24212;&#29992;&#20013;&#37117;&#38750;&#24120;&#26377;&#29992;&#65292;&#29305;&#21035;&#26159;&#22312;&#22788;&#29702;&#22810;&#23545;&#22810;&#20851;&#31995;&#26102;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#12298; Doctrine &#20013;&#30340;&#32423;&#32852;&#21024;&#38500;&#65306;&#23454;&#29992;&#25351;&#21335;&#12299; &#22312;&#25968;&#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-1133","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\/1133","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=1133"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1133"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1133"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}