{"id":1130,"date":"2025-06-12T13:44:15","date_gmt":"2025-06-12T05:44:15","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1130.html"},"modified":"2025-06-12T13:44:15","modified_gmt":"2025-06-12T05:44:15","slug":"php-doctrine-%e5%a6%82%e4%bd%95%e6%a0%b9%e6%8d%ae%e6%9d%a1%e4%bb%b6%e6%9b%b4%e6%96%b0%e8%ae%b0%e5%bd%95","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1130.html","title":{"rendered":"PHP Doctrine: \u5982\u4f55\u6839\u636e\u6761\u4ef6\u66f4\u65b0\u8bb0\u5f55"},"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;&#19979;&#38754;&#26159;&#22914;&#20309;&#20351;&#29992; PHP Doctrine &#26694;&#26550;&#26681;&#25454;&#26465;&#20214;&#26356;&#26032;&#35760;&#24405;&#30340;&#35814;&#32454;&#27493;&#39588;&#21644;&#31034;&#20363;&#20195;&#30721;&#12290;<\/p>\n<h3>1. &#23433;&#35013; Doctrine<\/h3>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#23433;&#35013; Doctrine ORM &#21644;&#30456;&#20851;&#30340;&#20381;&#36182;&#39033;&#12290;&#20320;&#21487;&#20197;&#36890;&#36807; Composer &#26469;&#31649;&#29702;&#36825;&#20123;&#20381;&#36182;&#39033;&#12290;<\/p>\n<pre><code class=\"language-bash\">composer require doctrine\/orm<\/code><\/pre>\n<h3>2. &#37197;&#32622; Doctrine<\/h3>\n<p>&#21019;&#24314;&#19968;&#20010; <code>config\/packages\/doctrine.yaml<\/code> &#25991;&#20214;&#26469;&#37197;&#32622; Doctrine&#12290;<\/p>\n<pre><code class=\"language-yaml\">doctrine:\n    dbal:\n        default_connection: default\n        connections:\n            default:\n                driver: pdo_mysql\n                host: localhost\n                dbname: your_database_name\n                user: your_username\n                password: your_password\n    orm:\n        auto_generate_proxy_classes: true\n        naming_strategy: doctrine.orm.naming_strategies.underscorenaming\n        metadata_cache_driver: array\n        query_cache_driver: array\n        result_cache_driver: array\n        mappings:\n            AppEntity:\n                type: annotation\n                dir: src\/Entity\n                prefix: AppEntity<\/code><\/pre>\n<h3>3. &#21019;&#24314;&#23454;&#20307;&#31867;<\/h3>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21517;&#20026; <code>User<\/code> &#30340;&#23454;&#20307;&#31867;&#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)\n     *\/\n    private $username;\n\n    \/**\n     * @ORMColumn(type=\"boolean\")\n     *\/\n    private $active;\n\n    \/\/ Getters and Setters\n}<\/code><\/pre>\n<h3>4. &#21019;&#24314; Repository &#31867;<\/h3>\n<p>&#21019;&#24314;&#19968;&#20010; UserRepository &#25509;&#21475;&#21644;&#23545;&#24212;&#30340;&#23454;&#29616;&#31867;&#12290;<\/p>\n<pre><code class=\"language-php\">namespace AppRepository;\n\nuse DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository;\nuse SymfonyBridgeDoctrineRegistryInterface;\n\nclass UserRepository extends ServiceEntityRepository\n{\n    public function __construct(RegistryInterface $registry)\n    {\n        parent::__construct($registry, User::class);\n    }\n\n    public function updateByUsername(string $username, bool $isActive): void\n    {\n        $queryBuilder = $this-&gt;createQueryBuilder('u');\n        $queryBuilder-&gt;where('u.username = :username')\n                    -&gt;andWhere('u.active = :isActive')\n                    -&gt;setParameter(':username', $username)\n                    -&gt;setParameter(':isActive', $isActive);\n\n        $queryBuilder-&gt;update();\n    }\n}<\/code><\/pre>\n<h3>5. &#20351;&#29992; Repository &#26356;&#26032;&#35760;&#24405;<\/h3>\n<p>&#29616;&#22312;&#20320;&#21487;&#20197;&#20351;&#29992;&#36825;&#20010; Repository &#26041;&#27861;&#26469;&#26356;&#26032;&#29992;&#25143;&#30340;&#29366;&#24577;&#12290;<\/p>\n<pre><code class=\"language-php\">use AppEntityUser;\nuse AppRepositoryUserRepository;\n\n\/\/ Assuming you have an instance of UserRepository\n$userRepository = new UserRepository($entityManager);\n\n$username = 'john_doe';\n$isActive = false;\n\n$userRepository-&gt;updateByUsername($username, $isActive);<\/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;&#20351;&#29992; Doctrine ORM &#26681;&#25454;&#26465;&#20214;&#26356;&#26032;&#35760;&#24405;&#12290;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nrequire_once 'vendor\/autoload.php';\n\nuse DoctrineORMEntityManagerInterface;\nuse DoctrineORMToolsDQLParser;\n\n\/\/ Create EntityManager\n$config = require 'config\/config.php';\n$entityManager = DoctrineORMEntityManager::create($config['dbal']['connections']['default'], $config['doctrine']);\n\n\/\/ Example data\n$username = 'john_doe';\n$isActive = false;\n\n\/\/ Update record using UserRepository\n$userRepository = $entityManager-&gt;getRepository(User::class);\n$userRepository-&gt;updateByUsername($username, $isActive);\n\n\/\/ Flush changes to the database\n$entityManager-&gt;flush();\n\necho \"Record updated successfully.\";\n?&gt;<\/code><\/pre>\n<p>&#24076;&#26395;&#36825;&#20010;&#31034;&#20363;&#33021;&#24110;&#21161;&#20320;&#29702;&#35299;&#22914;&#20309;&#20351;&#29992; PHP Doctrine ORM &#26681;&#25454;&#26465;&#20214;&#26356;&#26032;&#35760;&#24405;&#12290;&#22914;&#26524;&#20320;&#26377;&#20219;&#20309;&#38382;&#39064;&#65292;&#35831;&#38543;&#26102;&#25552;&#38382;&#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><h2>&#27010;&#36848;<\/h2><p>Doctrine ORM &#26159;&#19968;&#20010;&#24378;&#22823;&#30340;&#24037;&#20855;&#65292;&#29992;&#20110; PHP &#24212;&#29992;&#31243;&#24207;&#20013;&#30340;&#23545;&#35937;-&#20851;&#31995;&#26144;&#23556;&#65292;&#20351;&#24320;&#21457;&#20154;&#21592;&#33021;&#22815;&#20197;&#23545;&#35937;&#30340;&#26041;&#24335;&#25805;&#20316;&#25968;&#25454;&#24211;&#35760;&#24405;&#12290;&#24403;&#20320;&#38656;&#35201;&#26681;&#25454;&#26576;&#20123;&#26465;&#20214;&#26356;&#26032;&#35760;&#24405;&#26102;&#65292;Doctrine &#25552;&#20379;&#20102;&#22810;&#31181;&#26041;&#27861;&#26469;&#23436;&#25104;&#27492;&#20219;&#21153;&#12290;&#22312;&#26412;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#23558;&#25506;&#32034;&#22914;&#20309;&#20351;&#29992; PHP Doctrine &#26681;&#25454;&#26465;&#20214;&#26356;&#26032;&#35760;&#24405;&#12290;<\/p><p>&#20808;&#20915;&#26465;&#20214;<\/p><p>&#23545;Doctrine Entity&#31867;&#30340;&#29702;&#35299;<\/p><p>&#19968;&#20010;&#24037;&#20316;&#20013;&#30340;&#25968;&#25454;&#25805;&#20316;&#22411;(ORM)&#35774;&#32622;<\/p><p>&#24320;&#21457;&#29615;&#22659;&#30340; PHP &#21644; Composer<\/p><p>&#22522;&#26412;&#30340;PHP&#21644;&#38754;&#21521;&#23545;&#35937;&#32534;&#31243;&#65288;OOP&#65289;&#30340;&#29702;&#35299;&#12290;<\/p><h2>&#27493;&#39588;&#25351;&#21335;<\/h2><p>&#35831;&#25353;&#29031;&#20197;&#19979;&#27493;&#39588;&#25805;&#20316;&#65292;&#24744;&#23558;&#33021;&#22815;&#28145;&#20837;&#29702;&#35299;&#27492;&#20219;&#21153;&#12290;<\/p><h3>&#27493;&#39588;1&#65306;&#35774;&#32622;Doctrine&#23454;&#20307;&#31867;<\/h3><p>&#22312;&#26356;&#26032;&#35760;&#24405;&#20043;&#21069;&#65292;&#30830;&#20445;&#24050;&#32463;&#23558;&#19982;&#25968;&#25454;&#24211;&#34920;&#23545;&#24212;&#30340;Doctrine&#23454;&#20307;&#31867;&#26144;&#23556;&#21040;&#35813;&#31867;&#12290;&#20363;&#22914;&#65306;<\/p><pre><code>&lt;?php\n\nuse DoctrineORMMapping as ORM;\n\n\/**\n * @ORMEntity\n * @ORMTable(name=\"products\")\n *\/\nclass Product\n{\n    \/**\n     * @ORMColumn(type=\"integer\")\n     * @ORMId\n     * @ORMGeneratedValue(strategy=\"AUTO\")\n     *\/\n    private $id;\n\n    \/**\n     * @ORMColumn(type=\"string\", length=100)\n     *\/\n    private $name;\n\n    \/\/ ... additional fields ...\n\n    \/\/ Getters and setters for your properties go here\n}\n<\/code><\/pre><p>&#30830;&#20445;&#24744;&#30340;&#23454;&#20307;&#23436;&#20840;&#37197;&#32622;&#24182;&#27491;&#30830;&#26144;&#23556;&#21040;&#25968;&#25454;&#24211;&#34920;&#20013;&#12290;<\/p><h3>&#27493;&#39588;2&#65306;&#33719;&#21462;&#38656;&#35201;&#26356;&#26032;&#30340;&#23545;&#35937;&#65288;s&#65289;&#12290;<\/h3><p>&#35201;&#26356;&#26032;&#35760;&#24405;&#65292;&#39318;&#20808;&#38656;&#35201;&#20351;&#29992;Doctrine&#30340;EntityManager&#26816;&#32034;&#23427;&#12290;&#20197;&#19979;&#26159;&#31034;&#20363;&#65306;<\/p><pre><code>&lt;?php\n\n$entityManager = ...; \/\/ Get your EntityManager instance\n$productRepository = $entityManager-&gt;getRepository(Product::class);\n$product = $productRepository-&gt;findOneBy(['name' =&gt; 'Old Product Name']);\n\nif ($product) {\n    \/\/ Update the product's name\n    $product-&gt;setName('New Product Name');\n    \n    \/\/ Persist the changes\n    $entityManager-&gt;flush();\n} else {\n    echo 'Product not found';\n}\n<\/code><\/pre><h3>&#27493;&#39588;3&#65306;&#20351;&#29992;QueryBuilder&#36827;&#34892;&#25209;&#37327;&#26356;&#26032;<\/h3><p>&#22914;&#26524;&#20320;&#38656;&#35201;&#21516;&#26102;&#26356;&#26032;&#22810;&#26465;&#35760;&#24405;&#65292;&#21487;&#20197;&#20351;&#29992;Doctrine&#30340;Query Builder&#12290;&#20197;&#19979;&#26159;&#19968;&#20010;&#31034;&#20363;&#65292;&#29992;&#20110;&#26681;&#25454;&#26576;&#20010;&#26465;&#20214;&#26356;&#26032;&#25152;&#26377;&#20135;&#21697;&#65306;<\/p><pre><code>&lt;?php\n\n$queryBuilder = $entityManager-&gt;createQueryBuilder();\n\n$query = $queryBuilder\n    -&gt;update(Product::class, 'p')\n    -&gt;set('p.name', ':newName')\n    -&gt;where('p.id = :id')\n    -&gt;setParameter('newName', 'Updated Product Name')\n    -&gt;setParameter('id', $productId)\n    -&gt;getQuery();\n\n$query-&gt;execute();\n<\/code><\/pre><p>&#27492;&#26356;&#26032;&#20135;&#21697;&#20013;&#30340;&ldquo;&#21517;&#31216;&rdquo;&#23383;&#27573;&#65292;&#26465;&#20214;&#20026;&#29305;&#23450;&#30340;&ldquo;ID&rdquo;&#12290;&#36825;&#31181;&#26041;&#27861;&#20063;&#21487;&#20197;&#24212;&#29992;&#20110;&#20854;&#20182;&#24773;&#20917;&#12290;<\/p><h3>&#27493;&#39588; 4&#65306;&#20351;&#29992;&#21407;&#29983; SQL &#36827;&#34892;&#22797;&#26434;&#26356;&#26032;<\/h3><p>&#23545;&#20110;&#26356;&#22797;&#26434;&#30340;&#26356;&#26032;&#25805;&#20316;&#65292;&#24744;&#21487;&#20197;&#36873;&#25321;&#20351;&#29992;Doctrine&#30340;DBAL&#65288;&#25968;&#25454;&#24211;&#25277;&#35937;&#23618;&#65289;&#19982;Native SQL&#36827;&#34892;&#20132;&#20114;&#12290;&#20197;&#19979;&#26159;&#19968;&#20010;&#31034;&#20363;&#65306;<\/p><pre><code>&lt;?php\n\n$connection = $entityManager-&gt;getConnection();\n$platform = $connection-&gt;getDatabasePlatform();\n\n$sql = 'UPDATE products SET name = ? WHERE id = ?';\n$stmt = $connection-&gt;prepare($sql);\n$stmt-&gt;bindValue(1, 'Updated Product Name');\n$stmt-&gt;bindValue(2, $productId);\n$stmt-&gt;execute();\n<\/code><\/pre><p>&#36825;&#31181;&#26041;&#27861;&#24212;&#35880;&#24910;&#20351;&#29992;&#65292;&#22240;&#20026;&#23427;&#32469;&#36807;&#20102;ORM&#23618;&#65292;&#24182;&#26410;&#32771;&#34385;&#20219;&#20309;&#29983;&#21629;&#21608;&#26399;&#20107;&#20214;&#25110;&#23454;&#20307;&#29366;&#24577;&#21464;&#21270;&#12290;<\/p><h3>&#27493;&#39588; 5&#65306;&#22788;&#29702;&#20132;&#26131;<\/h3><p>&#22788;&#29702;&#25968;&#25454;&#24211;&#20107;&#21153;&#38750;&#24120;&#37325;&#35201;&#65292;&#23588;&#20854;&#26159;&#22312;&#25191;&#34892;&#20889;&#25805;&#20316;&#26102;&#23588;&#20854;&#22914;&#27492;&#12290;&#22312;Doctrine&#20013;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#21253;&#35065;&#26356;&#26032;&#25805;&#20316;&#26469;&#20351;&#29992;&#20107;&#21153;&#65306;<\/p><pre><code>&lt;?php\n\n$entityManager-&gt;beginTransaction();\n\ntry {\n    \/\/ Perform the update operations ...\n\n    \/\/ If everything is fine, commit the transaction\n    $entityManager-&gt;commit();\n} catch (Exception $e) {\n    \/\/ If something went wrong, rollback\n    $entityManager-&gt;rollback();\n    throw $e;\n}\n<\/code><\/pre><h2>&#32467;&#35770;<\/h2><p>&#20351;&#29992;Doctrine&#26356;&#26032;&#35760;&#24405;&#26465;&#20214;&#26102;&#65292;&#22312;PHP&#20013;&#38656;&#35201;&#35880;&#24910;&#22788;&#29702;ORM&#21644;&#20107;&#21153;&#25805;&#20316;&#12290;&#22987;&#32456;&#30830;&#20445;&#20351;&#29992;&#36866;&#21512;&#24744;&#38656;&#27714;&#30340;&#26041;&#27861;&#65292;&#26080;&#35770;&#26159;&#26356;&#26032;&#21333;&#20010;&#23545;&#35937;&#36824;&#26159;&#25191;&#34892;&#25209;&#37327;&#26356;&#26032;&#12290;&#36825;&#26679;&#20570;&#21487;&#20197;&#20445;&#25345;&#33391;&#22909;&#30340;&#20570;&#27861;&#65292;&#20174;&#32780;&#33719;&#24471;&#31283;&#23450;&#19988;&#21487;&#32500;&#25252;&#30340;&#20195;&#30721;&#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&#21644;Doctrine&#26694;&#26550;&#20013;&#65292;&#25105;&#20204;&#21487;&#20197;&#36890;&#36807;&#20351;&#29992;<code>update()<\/code>&#26041;&#27861;&#26469;&#26681;&#25454;&#26465;&#20214;&#26356;&#26032;&#25968;&#25454;&#24211;&#20013;&#30340;&#35760;&#24405;&#12290;&#20197;&#19979;&#26159;&#22914;&#20309;&#23454;&#29616;&#36825;&#20010;&#25805;&#20316;&#30340;&#27493;&#39588;&#65306;<\/p>\n<h3>&#27493;&#39588; 1: &#23433;&#35013;&#24182;&#37197;&#32622;Doctrine<\/h3>\n<p>&#39318;&#20808;&#30830;&#20445;&#23433;&#35013;&#20102;Doctrine&#21450;&#20854;&#30456;&#20851;&#30340;ORM&#65288;&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#65289;&#24211;&#12290;&#22914;&#26524;&#36824;&#27809;&#26377;&#30340;&#35805;&#65292;&#21487;&#20197;&#20351;&#29992;Composer&#36827;&#34892;&#23433;&#35013;&#12290;<\/p>\n<pre><code class=\"language-bash\">composer require doctrine\/orm<\/code><\/pre>\n<p>&#25509;&#19979;&#26469;&#65292;&#22312;&#20320;&#30340;&#39033;&#30446;&#30446;&#24405;&#19979;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;<code>config\/config.xml<\/code>&#25991;&#20214;&#65292;&#24182;&#28155;&#21152;&#20197;&#19979;&#37197;&#32622;&#20449;&#24687;&#65306;<\/p>\n<pre><code class=\"language-xml\">&lt;doctrine&gt;\n    &lt;orm&gt;\n        &lt;mapping file=\"path\/to\/mapping.php\" \/&gt;\n    &lt;\/orm&gt;\n&lt;\/doctrine&gt;<\/code><\/pre>\n<p>&#36825;&#37324;<code>path\/to\/mapping.php<\/code>&#26159;&#20320;&#30340;&#23454;&#20307;&#31867;&#23450;&#20041;&#30340;&#36335;&#24452;&#12290;<\/p>\n<h3>&#27493;&#39588; 2: &#21019;&#24314;Entity&#31867;<\/h3>\n<p>&#20551;&#35774;&#20320;&#26377;&#19968;&#20010;&#21517;&#20026;<code>User<\/code>&#30340;&#23454;&#20307;&#31867;&#65292;&#20854;&#23646;&#24615;&#21253;&#25324;<code>id<\/code>, <code>name<\/code>, &#21644; <code>email<\/code>&#31561;&#12290;&#21019;&#24314;&#30456;&#24212;&#30340;Entity&#31867;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace AppEntity;\n\nuse DoctrineORMMapping as ORM;\nuse SymfonyComponentValidatorConstraints as Assert;\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     * @AssertNotBlank(message=\"Name is required.\")\n     *\/\n    private $name;\n\n    \/**\n     * @ORMColumn(type=\"string\", length=255, unique=true)\n     * @AssertEmail(message=\"Invalid email address.\")\n     *\/\n    private $email;\n\n    \/\/ getters and setters\n}<\/code><\/pre>\n<h3>&#27493;&#39588; 3: &#26356;&#26032;&#25968;&#25454;<\/h3>\n<p>&#35201;&#26356;&#26032;&#35760;&#24405;&#65292;&#35831;&#20351;&#29992;<code>update()<\/code>&#26041;&#27861;&#12290;&#20363;&#22914;&#65292;&#22914;&#26524;&#20320;&#24819;&#35201;&#26356;&#26032;&#29992;&#25143;&#30340;&#21517;&#23383;&#20026;&#26032;&#30340;&#21517;&#23383;&#65292;&#20320;&#21487;&#20197;&#36825;&#26679;&#20570;&#65306;<\/p>\n<pre><code class=\"language-php\">$user = $em-&gt;find(User::class, 1);\n\nif ($user) {\n    $user-&gt;setName('New Name');\n\n    $em-&gt;flush(); \/\/ &#26356;&#26032;&#25968;&#25454;&#24211;\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#39318;&#20808;&#36890;&#36807;<code>$em-&gt;find()<\/code>&#25214;&#21040;&#29992;&#25143;&#65292;&#28982;&#21518;&#20351;&#29992;<code>setName()<\/code>&#26041;&#27861;&#26356;&#26032;&#29992;&#25143;&#21517;&#12290;&#26368;&#21518;&#65292;&#20351;&#29992;<code>$em-&gt;flush()<\/code>&#25191;&#34892;SQL&#20107;&#21153;&#65292;&#23558;&#26356;&#25913;&#25552;&#20132;&#21040;&#25968;&#25454;&#24211;&#12290;<\/p>\n<h3>&#27880;&#24847;&#20107;&#39033;<\/h3>\n<ul>\n<li><strong>&#21629;&#21517;&#31354;&#38388;<\/strong>&#65306;&#30830;&#20445;&#20320;&#30340;&#23454;&#20307;&#31867;&#21644;&#26144;&#23556;&#25991;&#20214;&#20855;&#26377;&#27491;&#30830;&#30340;&#21629;&#21517;&#31354;&#38388;&#12290;<\/li>\n<li><strong>&#32422;&#26463;&#39564;&#35777;&#22120;<\/strong>&#65306;&#20351;&#29992;<code>AssertNotBlank<\/code>&#21644;<code>AssertEmail<\/code>&#31561;&#39564;&#35777;&#22120;&#26469;&#30830;&#20445;&#23383;&#27573;&#19981;&#20026;&#31354;&#19988;&#30005;&#23376;&#37038;&#20214;&#26684;&#24335;&#27491;&#30830;&#12290;<\/li>\n<li><strong>&#20107;&#21153;&#22788;&#29702;<\/strong>&#65306;&#22312;&#23454;&#38469;&#24212;&#29992;&#20013;&#65292;&#36890;&#24120;&#20250;&#29992;<code>$em-&gt;getTransaction()-&gt;commit()<\/code>&#20195;&#26367;<code>$em-&gt;flush()<\/code>&#26469;&#30830;&#20445;&#25345;&#20037;&#21270;&#25805;&#20316;&#30340;&#19968;&#33268;&#24615;&#12290;<\/li>\n<\/ul>\n<p>&#20197;&#19978;&#23601;&#26159;&#22312;PHP&#21644;Doctrine&#26694;&#26550;&#20013;&#22914;&#20309;&#26681;&#25454;&#26465;&#20214;&#26356;&#26032;&#25968;&#25454;&#24211;&#35760;&#24405;&#30340;&#26041;&#27861;&#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;&#19979;&#38754;&#26159;&#22914;&#20309;&#20351;&#29992; PHP Doctrine &#26694;&#26550;&#26681;&#25454;&#038;#2646..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1130","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\/1130","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=1130"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1130"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1130"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}