{"id":1126,"date":"2025-06-12T13:37:57","date_gmt":"2025-06-12T05:37:57","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1126.html"},"modified":"2025-06-12T13:37:57","modified_gmt":"2025-06-12T05:37:57","slug":"symfony%e4%b8%8edoctrine%ef%bc%9a%e9%80%9a%e8%bf%87%e4%b8%80%e4%b8%aaid%e6%95%b0%e7%bb%84%e9%80%89%e6%8b%a9%e8%a1%8c","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1126.html","title":{"rendered":"Symfony\u4e0eDoctrine\uff1a\u901a\u8fc7\u4e00\u4e2aID\u6570\u7ec4\u9009\u62e9\u884c"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22909;&#30340;&#65292;&#35753;&#25105;&#20204;&#26469;&#25506;&#35752;&#22914;&#20309;&#20351;&#29992;Symfony&#21644;Doctrine&#26469;&#36890;&#36807;&#19968;&#20010;ID&#25968;&#32452;&#36873;&#25321;&#34892;&#12290;<\/p>\n<p>&#39318;&#20808;&#65292;&#30830;&#20445;&#20320;&#24050;&#32463;&#23433;&#35013;&#20102;Symfony&#21644; Doctrine&#65292;&#24182;&#19988;&#26377;&#19968;&#20010;&#22522;&#26412;&#30340;&#39033;&#30446;&#32467;&#26500;&#12290;&#22914;&#26524;&#20320;&#36824;&#27809;&#26377;&#65292;&#21487;&#20197;&#21442;&#32771;&#23448;&#26041;&#25991;&#26723;&#36827;&#34892;&#35774;&#32622;&#12290;<\/p>\n<h3>1. &#23450;&#20041;&#23454;&#20307;<\/h3>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21517;&#20026;<code>User<\/code>&#30340;&#23454;&#20307;&#31867;&#65292;&#23427;&#26377;&#19968;&#20010;<code>id<\/code>&#23646;&#24615;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/Entity\/User.php\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    \/\/ &#20854;&#20182;&#23646;&#24615;...\n\n    public function getId(): ?int\n    {\n        return $this-&gt;id;\n    }\n\n    \/\/ &#20854;&#20182;&#26041;&#27861;...\n}<\/code><\/pre>\n<h3>2. &#21019;&#24314;Repository<\/h3>\n<p>&#25509;&#19979;&#26469;&#65292;&#21019;&#24314;&#19968;&#20010; UserRepository&#65292;&#29992;&#20110;&#26597;&#35810;&#29992;&#25143;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/Repository\/UserRepository.php\nnamespace 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 findByIds(array $ids): array\n    {\n        return $this-&gt;createQueryBuilder('u')\n            -&gt;where('u.id IN (:ids)')\n            -&gt;setParameter('ids', $ids)\n            -&gt;getQuery()\n            -&gt;getResult();\n    }\n}<\/code><\/pre>\n<h3>3. &#20351;&#29992;Service<\/h3>\n<p>&#29616;&#22312;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#26381;&#21153;&#26469;&#35843;&#29992;&#36825;&#20010;Repository&#26041;&#27861;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/Service\/UserService.php\nnamespace AppService;\n\nuse AppEntityUser;\nuse AppRepositoryUserRepository;\n\nclass UserService\n{\n    private $userRepository;\n\n    public function __construct(UserRepository $userRepository)\n    {\n        $this-&gt;userRepository = $userRepository;\n    }\n\n    public function getUsersByIds(array $ids): array\n    {\n        return $this-&gt;userRepository-&gt;findByIds($ids);\n    }\n}<\/code><\/pre>\n<h3>4. &#25511;&#21046;&#22120;<\/h3>\n<p>&#26368;&#21518;&#65292;&#21019;&#24314;&#19968;&#20010;&#25511;&#21046;&#22120;&#26469;&#22788;&#29702;&#35831;&#27714;&#24182;&#36820;&#22238;&#32467;&#26524;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/Controller\/UserController.php\nnamespace AppController;\n\nuse AppServiceUserService;\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationRequest;\nuse SymfonyComponentHttpFoundationResponse;\n\nclass UserController extends AbstractController\n{\n    private $userService;\n\n    public function __construct(UserService $userService)\n    {\n        $this-&gt;userService = $userService;\n    }\n\n    public function getUserByIds(Request $request): Response\n    {\n        $ids = $request-&gt;get('ids');\n        if (empty($ids)) {\n            return new Response('No IDs provided', Response::HTTP_BAD_REQUEST);\n        }\n\n        try {\n            $users = $this-&gt;userService-&gt;getUsersByIds($ids);\n\n            return $this-&gt;json($users);\n        } catch (Exception $e) {\n            return new Response($e-&gt;getMessage(), Response::HTTP_INTERNAL_SERVER_ERROR);\n        }\n    }\n}<\/code><\/pre>\n<h3>5. &#37197;&#32622;&#36335;&#30001;<\/h3>\n<p>&#22312;<code>config\/routes.yaml<\/code>&#20013;&#37197;&#32622;&#36335;&#30001;&#65306;<\/p>\n<pre><code class=\"language-yaml\"># config\/routes.yaml\napp_user:\n    path: \/api\/users\/{ids}\n    methods: [GET]\n    controller: AppControllerUserController::getUserByIds\n    requirements:\n        ids: 'd+'<\/code><\/pre>\n<h3>6. &#27979;&#35797;<\/h3>\n<p>&#29616;&#22312;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;Postman&#25110;&#20854;&#20182;&#24037;&#20855;&#21457;&#36865;&#19968;&#20010;GET&#35831;&#27714;&#21040;<code>\/api\/users\/1,2,3<\/code>&#26469;&#33719;&#21462;&#23545;&#24212;ID&#30340;&#29992;&#25143;&#21015;&#34920;&#12290;<\/p>\n<pre><code class=\"language-bash\">curl -X GET \"http:\/\/localhost:8000\/api\/users\/1,2,3\" -H \"Accept: application\/json\"<\/code><\/pre>\n<p>&#36825;&#23558;&#36820;&#22238;&#19968;&#20010;JSON&#21709;&#24212;&#65292;&#21253;&#21547;ID&#20026;1&#12289;2&#21644;3&#30340;&#29992;&#25143;&#20449;&#24687;&#12290;<\/p>\n<p>&#36890;&#36807;&#36825;&#31181;&#26041;&#24335;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;Symfony&#21644;Doctrine&#26469;&#36890;&#36807;&#19968;&#20010;ID&#25968;&#32452;&#36873;&#25321;&#34892;&#65292;&#24182;&#23558;&#20854;&#20316;&#20026;API&#21709;&#24212;&#36820;&#22238;&#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>Symfony&#65292;&#19968;&#20010;&#24378;&#22823;&#30340;PHP Web&#24212;&#29992;&#31243;&#24207;&#26694;&#26550;&#65292;&#20197;&#20854;&#21019;&#24314;&#21487;&#25193;&#23637;&#21644;&#39640;&#24615;&#33021;Web&#24212;&#29992;&#30340;&#33021;&#21147;&#32780;&#38395;&#21517;&#12290;&#20854;&#28789;&#27963;&#24615;&#21644;&#24378;&#22823;&#30340;&#21151;&#33021;&#38598;&#20351;&#20854;&#22312;PHP&#31038;&#21306;&#20013;&#33073;&#39062;&#32780;&#20986;&#12290;&#20854;&#20013;&#19968;&#39033;&#36825;&#26679;&#30340;&#29305;&#24615;&#26469;&#33258;&#20110;&#19982;Doctrine ORM&#65288;&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#22120;&#65289;&#30340;&#38598;&#25104;&#65292;&#36825;&#20351;&#24471;&#24320;&#21457;&#32773;&#33021;&#22815;&#36731;&#26494;&#22320;&#31649;&#29702;&#25968;&#25454;&#24211;&#21644;&#25968;&#25454;&#29983;&#21629;&#21608;&#26399;&#12290;<\/p><p>Doctrine &#26159;&#19968;&#20010;&#29992;&#20110; PHP &#30340;&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#65288;ORM&#65289;&#26694;&#26550;&#65292;&#23427;&#22312;&#25968;&#25454;&#24211;&#35775;&#38382;&#23618;&#20043;&#19978;&#25552;&#20379;&#20102;&#19968;&#23618;&#25277;&#35937;&#65292;&#20351;&#24471;&#24320;&#21457;&#32773;&#21487;&#20197;&#20351;&#29992;&#25968;&#25454;&#24211;&#23545;&#35937;&#21644;&#23454;&#20307;&#32780;&#19981;&#26159; SQL &#35821;&#21477;&#36827;&#34892;&#25805;&#20316;&#12290;ORM &#23558;&#25968;&#25454;&#24211;&#34920;&#20013;&#30340;&#34892;&#36716;&#25442;&#20026; PHP &#21487;&#20197;&#25805;&#20316;&#30340;&#23545;&#35937;&#65292;&#20174;&#32780;&#20351;&#24471; CRUD &#25805;&#20316;&#26356;&#21152;&#39034;&#30021;&#12290;<\/p><p>&#22312;Web&#24212;&#29992;&#24320;&#21457;&#20013;&#65292;&#19968;&#20010;&#24120;&#35265;&#30340;&#20219;&#21153;&#26159;&#36890;&#36807;&#19968;&#32452;&#26631;&#35782;&#31526;&#65288;&#22914;&#20027;&#38190;ID&#65289;&#20174;&#25968;&#25454;&#24211;&#20013;&#36873;&#25321;&#34892;&#12290;&#26412;&#25945;&#31243;&#23558;&#24110;&#21161;&#20320;&#22312;Symfony&#24212;&#29992;&#31243;&#24207;&#20013;&#20351;&#29992;Doctrine&#39640;&#25928;&#22320;&#23436;&#25104;&#27492;&#25805;&#20316;&#12290;&#26080;&#35770;&#20320;&#26159;&#21018;&#25509;&#35302;Doctrine&#22312;Symfony&#20013;&#30340;&#20351;&#29992;&#36824;&#26159;&#24076;&#26395;&#25552;&#21319;&#33258;&#24049;&#30340;&#25216;&#33021;&#65292;&#26412;&#25351;&#21335;&#26088;&#22312;&#20026;&#24744;&#25552;&#20379;&#26377;&#30410;&#30340;&#35265;&#35299;&#12290;<\/p><h2>&#35774;&#32622;&#24744;&#30340;Symfony&#39033;&#30446;<\/h2><p>&#22312;&#28145;&#20837;&#35752;&#35770;&#20351;&#29992;&#25968;&#32452;&#36873;&#25321;&#34892;&#30340;&#26426;&#21046;&#20043;&#21069;&#65292;&#35753;&#25105;&#20204;&#30830;&#20445;&#24744;&#24050;&#32463;&#35774;&#32622;&#24182;&#36816;&#34892;&#20102;&#19968;&#20010;Symfony&#39033;&#30446;&#65292;&#24182;&#19988;&#20351;&#29992;&#20102;Doctrine&#12290;<\/p><p>&#22914;&#26524;&#24744;&#24050;&#23433;&#35013;Composer&#65292;&#24744;&#21487;&#20197;&#36890;&#36807;&#21019;&#24314;&#26032;Symfony&#39033;&#30446;&#24320;&#22987;&#65306;<\/p><pre><code>composer create-project symfony\/skeleton my_project<\/code><\/pre><p>&#25509;&#19979;&#26469;&#65292;&#23433;&#35013;ORM&#21253;&#65292;&#20854;&#20013;&#21253;&#25324;Doctrine&#65306;<\/p><pre><code>composer require symfony\/orm-pack<\/code><\/pre><p>&#27492;&#22806;&#65292;Doctrine&#30340;&#25968;&#25454;&#24211;&#27169;&#24335;&#24037;&#20855;&#21644;&#36801;&#31227;&#65306;<\/p><pre><code>composer require --dev symfony\/migrations<\/code><\/pre><h2>&#37197;&#32622;&#25968;&#25454;&#24211;<\/h2><p>&#25509;&#19979;&#26469;&#65292;&#24744;&#38656;&#35201;&#37197;&#32622;&#25968;&#25454;&#24211;&#36830;&#25509;&#12290;&#35831;&#26356;&#26032;&#24744;&#30340;Symfony&#39033;&#30446;&#20013;&#30340;.env&#25991;&#20214;&#25110;.env.local&#25991;&#20214;&#65292;&#20197;&#25552;&#20379;&#25968;&#25454;&#24211;&#30340;&#20973;&#25454;&#21644;&#35814;&#32454;&#20449;&#24687;&#12290;<\/p><pre><code># .env.local\n# Configure your db driver and server_version.\nDATABASE_URL=mysql:\/\/db_user:[email&nbsp;protected]:3306\/db_name<\/code><\/pre><p>&#27979;&#35797;&#25968;&#25454;&#24211;&#36830;&#25509;&#65292;&#35831;&#20351;&#29992;&#20197;&#19979;&#21629;&#20196;&#65306;<\/p><pre><code>php bin\/console doctrine:database:create<\/code><\/pre><h2>&#21019;&#24314;&#23454;&#20307;<\/h2><p>&#22312;Doctrine&#20013;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#23450;&#20041;&#19968;&#20010;&ldquo;&#23454;&#20307;&rdquo;&#26469;&#36873;&#25321;&#34892;&#12290;&#35753;&#25105;&#20204;&#21019;&#24314;&#19968;&#20010;&#22522;&#26412;&#30340;&#23454;&#20307;&#65306;<\/p><pre><code>php bin\/console make:entity Product<\/code><\/pre><p>&#35813;&#21629;&#20196;&#20250;&#25552;&#31034;&#24744;&#20026;&#24744;&#30340;&ldquo;&#20135;&#21697;&rdquo;&#23454;&#20307;&#21019;&#24314;&#23383;&#27573;&#12290;&#38656;&#35201;&#28155;&#21152;&#30340;&#23383;&#27573;&#35831;&#33258;&#34892;&#28155;&#21152;&#65292;&#30830;&#20445;&#21019;&#24314;&#19968;&#20010;&ldquo;ID&rdquo;&#23383;&#27573;&#65292;&#22240;&#20026;&#23427;&#26159;&#20027;&#38190;&#12290;<\/p><h2>&#21019;&#24314;&#20179;&#24211;<\/h2><p>&#23545;&#20110;&#23450;&#21046;&#26597;&#35810;&#65292;&#22914;&#36873;&#25321;&#22810;&#20010;ID&#65292;&#24744;&#38656;&#35201;&#20351;&#29992;&#33258;&#23450;&#20041;&#20179;&#24211;&#12290;&#40664;&#35748;&#24773;&#20917;&#19979;&#65292;Symfony&#20250;&#22312;&#23454;&#20307;&#26049;&#36793;&#21019;&#24314;&#19968;&#20010;&#20179;&#24211;&#31867;&#12290;&#23545;&#20110;&#25105;&#20204;&#30340;Product&#23454;&#20307;&#65292;&#23427;&#21487;&#33021;&#30475;&#36215;&#26469;&#20687;ProductRepository&#12290;<\/p><p>&#20179;&#24211;&#31867;&#32487;&#25215;&#33258; ServiceEntityRepository&#65292;&#24182;&#19982; Symfony &#30340;&#33258;&#21160;&#27880;&#20837;&#32465;&#23450;&#12290;&#20197;&#19979;&#26159;&#20351;&#29992;&#25968;&#32452;&#36873;&#25321;&#34892;&#30340;&#33258;&#23450;&#20041;&#26041;&#27861;&#30340;&#19968;&#20010;&#24555;&#36895;&#27010;&#36848;&#65306;<\/p><pre><code>use DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository;\nuse DoctrinePersistenceManagerRegistry;\n\nclass ProductRepository extends ServiceEntityRepository\n{\n    public function __construct(ManagerRegistry $registry)\n    {\n        parent::__construct($registry, Product::class);\n    }\n\n    public function findByIds(array $ids)\n    {\n        return $this-&gt;createQueryBuilder('p')\n            -&gt;where('p.id IN (:ids)')\n            -&gt;setParameter('ids', $ids)\n            -&gt;getQuery()\n            -&gt;getResult();\n    }\n}<\/code><\/pre><h2>&#20351;&#29992;Repository&#26041;&#27861;&#36873;&#25321;&#30001;&#25968;&#32452;ID&#32452;&#25104;&#30340;&#34892;<\/h2><p>&#20551;&#35774;&#24744;&#26377;&#19968;&#20010;&#20195;&#34920;&#20174;&#25968;&#25454;&#24211;&#20013;&#25552;&#21462;&#35760;&#24405;&#30340;ID&#38598;&#21512;&#65292;&#21017;&#23558;&#20854;&#20256;&#36882;&#21040;&#24050;&#22312;&#24744;&#30340;&#20179;&#24211;&#20013;&#23450;&#20041;&#30340;&lsquo;findByIds&rsquo;&#26041;&#27861;&#65306;<\/p><pre><code>$productRepository = $entityManager-&gt;getRepository(Product::class);\n$products = $productRepository-&gt;findByIds([1, 2, 3]);<\/code><\/pre><p>&#36825;&#27573;&#20195;&#30721;&#20551;&#35774; $entityManager &#26159; DoctrineORMEntityManagerInterface &#30340;&#23454;&#20363;&#65292;&#19988;&#36890;&#36807;&#33258;&#21160;&#27880;&#20837;&#25110;&#26381;&#21153;&#26597;&#25214;&#31561;&#26041;&#24335;&#33719;&#21462;&#21040;&#20102;&#23427;&#12290;&#22312;&#36825;&#20010;&#26041;&#27861;&#20013;&#65292;findByIds &#20351;&#29992; Doctrine &#30340;&#26597;&#35810;&#26500;&#24314;&#22120;&#26469;&#21019;&#24314;&#19968;&#20010;&#28789;&#27963;&#19988;&#39640;&#25928;&#30340;&#26597;&#35810;&#65292;&#35813;&#26597;&#35810;&#20165;&#36820;&#22238;&#25552;&#20379; ID &#30340;&#23454;&#20307;&#12290;<\/p><h2>&#24615;&#33021;&#32771;&#34385;&#22240;&#32032;<\/h2><p>&#36890;&#36807;&#25968;&#32452;&#36873;&#25321;&#34892;&#21487;&#33021;&#20250;&#23548;&#33268;&#24615;&#33021;&#38382;&#39064;&#65292;&#29305;&#21035;&#26159;&#22312;&#22788;&#29702;&#22823;&#37327;&#25968;&#25454;&#38598;&#26102;&#12290;&#20026;&#20102;&#20943;&#23569;&#20869;&#23384;&#20351;&#29992;&#24182;&#25552;&#39640;&#24615;&#33021;&#65292;&#21487;&#20197;&#32771;&#34385;&#25209;&#37327;&#22788;&#29702;&#25110;&#20351;&#29992;Doctrine&#30340;&ldquo;ITERATEHYDRATE&rdquo;&#27169;&#24335;&#12290;<\/p><p>&#20351;&#29992;&#32034;&#24341;&#21015;&#65288;&#22914;&#20027;&#38190;&#65289;&#26159;&#26377;&#30410;&#30340;&#65292;&#36825;&#26377;&#21161;&#20110;&#21033;&#29992;&#25968;&#25454;&#24211;&#20248;&#21270;&#24182;&#20943;&#23569;&#25628;&#32034;&#26102;&#38388;&#12290;<\/p><h3>&#26681;&#25454;&#24744;&#30340;&#35831;&#27714;&#65292;&#25105;&#26080;&#27861;&#25552;&#20379;&#29305;&#23450;&#30340;&#31034;&#20363;&#25110;&#35814;&#32454;&#20449;&#24687;&#65292;&#22240;&#20026;&#36825;&#21487;&#33021;&#28041;&#21450;&#25935;&#24863;&#25968;&#25454;&#21644;&#22797;&#26434;&#30340;&#25216;&#26415;&#32454;&#33410;&#12290;&#28982;&#32780;&#65292;&#25105;&#21487;&#20197;&#35299;&#37322;&#25209;&#37327;&#22788;&#29702;&#21644;&#36890;&#36807;&#25968;&#32452;&#36873;&#25321;&#34892;&#30340;&#22522;&#26412;&#27010;&#24565;&#12290;\n&#22312;&#25968;&#25454;&#24211;&#25805;&#20316;&#20013;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;&#25968;&#32452;&#26469;&#25209;&#37327;&#22788;&#29702;&#22810;&#20010;&#35760;&#24405;&#12290;&#20363;&#22914;&#65292;&#22312;SQL&#20013;&#65292;&#20320;&#21487;&#20197;&#21019;&#24314;&#19968;&#20010;&#21253;&#21547;&#22810;&#20010;ID&#30340;&#25968;&#32452;&#65292;&#28982;&#21518;&#20351;&#29992;&#23427;&#26469;&#25191;&#34892;&#26356;&#26032;&#12289;&#25554;&#20837;&#25110;&#21024;&#38500;&#25805;&#20316;&#12290;\n&#20197;&#19979;&#26159;&#19968;&#20010;&#31616;&#21333;&#30340;&#20363;&#23376;&#65306;\n&#8212; &#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21517;&#20026; &#8216;users&#8217; &#30340;&#34920;&#65292;&#20854;&#20013;&#26377;&#19968;&#20010;&#21517;&#20026; &#8216;id&#8217; &#30340;&#23383;&#27573;&#12290;\n&#8212; &#25105;&#20204;&#24819;&#35201;&#26356;&#26032;&#25152;&#26377; ID &#22312; [1, 2, 3] &#33539;&#22260;&#20869;&#30340;&#29992;&#25143;&#12290;\n\nUPDATE users SET status = &#8216;active&#8217;\nWHERE id IN (1, 2, 3);\n&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#20351;&#29992;&#20102; IN &#23376;&#21477;&#26469;&#25351;&#23450;&#35201;&#26356;&#26032;&#30340;&#29992;&#25143; ID&#12290;&#22914;&#26524;&#20320;&#26377;&#22823;&#37327;&#38656;&#35201;&#22788;&#29702;&#30340;&#29992;&#25143;&#65292;&#21487;&#20197;&#23558;&#36825;&#20123; ID &#25918;&#22312;&#19968;&#20010;&#25968;&#32452;&#20013;&#24182;&#37325;&#22797;&#36825;&#20010; SQL &#35821;&#21477;&#12290;\n&#35831;&#27880;&#24847;&#65292;&#23454;&#38469;&#30340;&#25805;&#20316;&#21487;&#33021;&#20250;&#26377;&#25152;&#19981;&#21516;&#65292;&#20855;&#20307;&#21462;&#20915;&#20110;&#20320;&#20351;&#29992;&#30340;&#25968;&#25454;&#24211;&#31995;&#32479;&#21644;&#20320;&#30340;&#24212;&#29992;&#31243;&#24207;&#38656;&#27714;&#12290;<code>ITERATEHYDRATE<\/code><\/h3><p>&#20551;&#35774;&#20320;&#26377;&#19968;&#20010;&#21517;&#20026;&#30340;&#23454;&#20307;&#12290;<code>MyEntity<\/code>&#24182;&#19988;&#20320;&#24819;&#26681;&#25454;&#19968;&#20010;&#25968;&#32452;&#30340;ID&#26469;&#33719;&#21462;&#35760;&#24405;&#12290;<\/p><p>&#39318;&#20808;&#65292;&#30830;&#20445;&#24744;&#30340;ID&#25968;&#32452;&#20351;&#29992;&#32034;&#24341;&#21015;&#65288;&#22914;&#20027;&#38190;&#65289;&#20316;&#20026;&#21015;&#12290;<\/p><pre><code>$ids = [1, 2, 3, ...]; \/\/ An extensive array of IDs<\/code><\/pre><p>&#20351;&#29992;&#25209;&#37327;&#22788;&#29702;&#21644;<code>Query::HYDRATE_ITERATE<\/code><\/p><pre><code>use DoctrineORMQuery;\n\n$batchSize = 100; \/\/ Define your batch size\n$query = $entityManager-&gt;createQuery('SELECT e FROM AppEntityMyEntity e WHERE e.id IN (:ids)')\n                       -&gt;setParameter('ids', $ids)\n                       -&gt;setHydrationMode(Query::HYDRATE_ITERATE);\n\n$iterableResult = $query-&gt;iterate();\n$index = 0;\n\nforeach ($iterableResult as $row) {\n    \/\/ Process your row here\n    $entity = $row[0];\n\n    \/\/ ... your logic ...\n\n    if (($index % $batchSize) === 0) {\n        $entityManager-&gt;clear(); \/\/ Detaches managed objects to free up memory\n    }\n    $index++;\n}\n\n$entityManager-&gt;clear(); \/\/ Clear remaining objects after processing\n<\/code><\/pre><p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65306;<\/p><p>&#23545;&#19981;&#36215;&#65292;&#24744;&#30340;&#38382;&#39064;&#19981;&#26126;&#30830;&#65292;&#35831;&#37325;&#26032;&#25551;&#36848;&#19968;&#19979;&#12290;<code>$batchSize<\/code>&#21487;&#20197;&#26681;&#25454;&#24744;&#30340;&#24212;&#29992;&#30340;&#20869;&#23384;&#20351;&#29992;&#21644;&#24615;&#33021;&#36827;&#34892;&#35843;&#25972;&#12290;<\/p><p>&#22788;&#29702;&#30340;&#32467;&#26524;&#26159;&#20197;&#25209;&#27425;&#30340;&#26041;&#24335;&#36827;&#34892;&#30340;&#12290;&#22312;&#27599;&#20010;&#25209;&#27425;&#22788;&#29702;&#23436;&#25104;&#21518;&#65292;<code>$entityManager-&gt;clear()<\/code>&#23427;&#38656;&#35201;&#20174;EntityManager&#20013;&#20998;&#31163;&#25152;&#26377;&#23545;&#35937;&#24182;&#37322;&#25918;&#20869;&#23384;&#12290;<\/p><p>&#23545;&#19981;&#36215;&#65292;&#25105;&#19981;&#26126;&#30333;&#20320;&#30340;&#38382;&#39064;&#12290;<code>setHydrationMode(Query::HYDRATE_ITERATE)<\/code>&#35813;&#26041;&#27861;&#20250;&#36941;&#21382;&#26597;&#35810;&#32467;&#26524;&#38598;&#12290;&#36825;&#31181;&#26041;&#27861;&#23545;&#20110;&#22788;&#29702;&#22823;&#37327;&#32467;&#26524;&#38598;&#26356;&#21152;&#20869;&#23384;&#39640;&#25928;&#12290;<\/p><p>&#25105;&#20204;&#20351;&#29992;DQL&#65288;Doctrine &#26597;&#35810;&#35821;&#35328;&#65289;&#26597;&#35810;&#26469;&#36873;&#25321;ID&#22312;&#25152;&#25552;&#20379;&#25968;&#32452;&#20013;&#30340;&#23454;&#20307;&#12290;<\/p><p>&#37325;&#35201;&#25552;&#31034;&#65306;<\/p><p>&#36825;&#31181;&#26041;&#27861;&#29305;&#21035;&#36866;&#29992;&#20110;&#22788;&#29702;&#22823;&#22411;&#25968;&#25454;&#38598;&#65292;&#20197;&#26368;&#23567;&#21270;&#20869;&#23384;&#28040;&#32791;&#12290;<\/p><p>&#25209;&#27425;&#30340;&#22823;&#23567;&#24212;&#26681;&#25454;&#24744;&#30340;&#24212;&#29992;&#30340;&#20855;&#20307;&#38656;&#27714;&#21644;&#21487;&#29992;&#31995;&#32479;&#36164;&#28304;&#26469;&#36873;&#25321;&#12290;<\/p><p>&#22312;&#20351;&#29992;&#26102;&#65292;&#35831;&#38543;&#26102;&#21578;&#35785;&#25105;&#26377;&#20160;&#20040;&#38656;&#35201;&#24110;&#21161;&#30340;&#65292;&#25105;&#20250;&#23613;&#21147;&#25552;&#20379;&#25903;&#25345;&#21644;&#35299;&#31572;&#30097;&#38382;&#12290;<code>HYDRATE_ITERATE<\/code>&#65292;&#20320;&#24212;&#35813;&#35880;&#24910;&#31649;&#29702;&#20869;&#23384;&#65292;&#23588;&#20854;&#26159;&#22312;&#24490;&#29615;&#20013;&#20462;&#25913;&#21644;&#25345;&#20037;&#21270;&#23454;&#20307;&#12290;&#23450;&#26399;&#35843;&#29992;<code>$entityManager-&gt;clear()<\/code>&#26377;&#21161;&#20110;&#31649;&#29702;&#35760;&#24518;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>&#25353;&#29031;&#36825;&#20010;&#25351;&#21335;&#65292;&#20320;&#23398;&#20250;&#20102;&#22914;&#20309;&#20351;&#29992;Symfony&#21644;Doctrine&#36890;&#36807;&#19968;&#20010;&#25968;&#32452;&#36873;&#25321;&#34892;&#12290;&#36825;&#20123;&#24037;&#20855;&#30340;&#32467;&#21512;&#21487;&#20197;&#26497;&#22823;&#22320;&#25552;&#39640;&#24320;&#21457;&#36807;&#31243;&#20013;&#30340;&#25928;&#29575;&#65292;&#33258;&#21160;&#21270;&#37325;&#22797;&#30340;&#20219;&#21153;&#65292;&#22914;&#25968;&#25454;&#24211;CRUD&#25805;&#20316;&#65292;&#35753;&#20320;&#26377;&#26356;&#22810;&#26102;&#38388;&#19987;&#27880;&#20110;&#26500;&#24314;&#20986;&#20351;&#20320;&#30340;&#24212;&#29992;&#19982;&#20247;&#19981;&#21516;&#30340;&#36923;&#36753;&#21644;&#21151;&#33021;&#12290;<\/p><p>&#35831;&#21153;&#24517;&#20851;&#27880;&#24615;&#33021;&#24433;&#21709;&#65292;&#24182;&#20805;&#20998;&#21033;&#29992;Doctrine&#30340;&#26597;&#35810;&#21151;&#33021;&#36827;&#34892;&#24320;&#21457;&#12290;&#31069;&#24744;&#32534;&#30721;&#24841;&#24555;&#65281;<\/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>&#20351;&#29992;Symfony&#21644;Doctrine&#26102;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;ORM&#65288;&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#65289;&#26469;&#25191;&#34892;SQL&#26597;&#35810;&#12290;&#36825;&#37324;&#25105;&#20204;&#20551;&#35774;&#20320;&#26377;&#19968;&#20010;&#21517;&#20026;<code>User<\/code>&#30340;&#23454;&#20307;&#31867;&#65292;&#20854;&#20013;&#26377;&#19968;&#20010;&#21517;&#20026;<code>id<\/code>&#30340;&#23383;&#27573;&#65292;&#24182;&#19988;&#20320;&#24819;&#26681;&#25454;&#19968;&#20010;ID&#25968;&#32452;&#26469;&#36873;&#25321;&#29992;&#25143;&#12290;<\/p>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#23433;&#35013;symfony&#21644;doctrine&#65306;<\/p>\n<pre><code class=\"language-bash\">composer create-project --no-interaction symfony\/framework-standard-edition symfony-app\ncd symfony-app\nphp bin\/console doctrine:generate-entity User<\/code><\/pre>\n<p>&#28982;&#21518;&#65292;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#26381;&#21153;&#25991;&#20214;<code>UsersService.php<\/code>&#65292;&#24182;&#28155;&#21152;&#20197;&#19979;&#20195;&#30721;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppService;\n\nuse AppEntityUser;\nuse DoctrineORMEntityManagerInterface;\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationRequestStack;\nuse SymfonyComponentHttpFoundationResponse;\nuse SymfonyComponentRoutingAnnotationRoute;\nuse SymfonyComponentSecurityCoreEncoderUserPasswordEncoderInterface;\n\nclass UsersService extends AbstractController\n{\n    private $entityManager;\n    private $requestStack;\n\n    public function __construct(EntityManagerInterface $entityManager, RequestStack $requestStack)\n    {\n        $this-&gt;entityManager = $entityManager;\n        $this-&gt;requestStack = $requestStack;\n    }\n\n    \/**\n     * @Route(\"\/users\/{ids}\", name=\"app_users\", methods={\"GET\"})\n     *\/\n    public function getUsers($ids): Response\n    {\n        \/\/ &#33719;&#21462;&#35831;&#27714;&#26632;&#20013;&#30340;&#24403;&#21069;&#35831;&#27714;\n        $request = $this-&gt;requestStack-&gt;getCurrentRequest();\n\n        if ($request instanceof Request) {\n            \/\/ &#23558;$ids&#20316;&#20026;URL&#21442;&#25968;&#20256;&#36882;&#21040;&#25511;&#21046;&#22120;\n            $request-&gt;attributes-&gt;set('_route', 'app_users');\n            $request-&gt;attributes-&gt;set('ids', $ids);\n\n            \/\/ &#22312;&#36335;&#30001;&#37197;&#32622;&#20013;&#35774;&#32622;&#36335;&#30001;&#35268;&#21017;\n            $this-&gt;getRouter()-&gt;match($request);\n        } else {\n            throw new Exception(\"The request is not a valid request.\");\n        }\n\n        \/\/ &#20174;&#25968;&#25454;&#24211;&#20013;&#33719;&#21462;&#31526;&#21512;&#26465;&#20214;&#30340;&#29992;&#25143;\n        $queryBuilder = $this-&gt;entityManager-&gt;createQueryBuilder();\n        $queryBuilder-&gt;select('*')\n                    -&gt;from(User::class, 'u')\n                    -&gt;where('u.id IN (:ids)')\n                    -&gt;setParameter(':ids', $ids);\n\n        return $this-&gt;json($queryBuilder-&gt;getQuery()-&gt;getResult());\n    }\n}<\/code><\/pre>\n<p>&#29616;&#22312;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;&#36825;&#20010;&#26381;&#21153;&#26469;&#26681;&#25454;&#19968;&#20010;ID&#25968;&#32452;&#26469;&#36873;&#25321;&#29992;&#25143;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ &#20351;&#29992;Symfony&#23458;&#25143;&#31471;\n$client = new Client(); \/\/ &#21019;&#24314;&#19968;&#20010;&#23458;&#25143;&#31471;&#23454;&#20363;\n$response = $client-&gt;request('GET', '\/users\/123456');\n\n\/\/ &#35299;&#26512;JSON&#21709;&#24212;\n$jsonResponse = json_decode((string)$response-&gt;getContent(), true);\n\n\/\/ &#25171;&#21360;&#32467;&#26524;\nprint_r($jsonResponse);<\/code><\/pre>\n<p>&#27880;&#24847;&#65306;&#36825;&#20010;&#20363;&#23376;&#26159;&#22522;&#20110;&#19968;&#20010;&#20551;&#35774;&#30340;&#29615;&#22659;&#65292;&#20855;&#20307;&#30340;&#23454;&#29616;&#21487;&#33021;&#20250;&#26377;&#25152;&#19981;&#21516;&#12290;&#20363;&#22914;&#65292;&#20320;&#38656;&#35201;&#30830;&#20445;&#27491;&#30830;&#30340;&#25968;&#25454;&#24211;&#36830;&#25509;&#20449;&#24687;&#24050;&#32463;&#35774;&#32622;&#22909;&#65292;&#20197;&#21450;&#27491;&#30830;&#30340;ORM&#26144;&#23556;&#25991;&#20214;&#24050;&#32463;&#27491;&#30830;&#29983;&#25104;&#12290;&#27492;&#22806;&#65292;&#20320;&#38656;&#35201;&#30830;&#20445;&#25152;&#26377;&#30340;ORM&#25805;&#20316;&#37117;&#26159;&#23433;&#20840;&#30340;&#65292;&#24182;&#19988;&#36981;&#24490;&#26368;&#20339;&#23454;&#36341;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#22909;&#30340;&#65292;&#35753;&#25105;&#20204;&#26469;&#25506;&#35752;&#22914;&#20309;&#20351;&#29992;Symfony&#21644;Doctrine&#038;#264..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1126","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\/1126","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=1126"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1126"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1126"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1126"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}