{"id":1127,"date":"2025-06-12T13:39:29","date_gmt":"2025-06-12T05:39:29","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1127.html"},"modified":"2025-06-12T13:39:29","modified_gmt":"2025-06-12T05:39:29","slug":"php-doctrine%ef%bc%9a%e5%8a%a0%e6%9d%83%e9%9a%8f%e6%9c%ba%e6%9f%a5%e8%af%a2%e7%a4%ba%e4%be%8b","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1127.html","title":{"rendered":"PHP Doctrine\uff1a\u52a0\u6743\u968f\u673a\u67e5\u8be2\u793a\u4f8b"},"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;&#20351;&#29992; PHP Doctrine &#36827;&#34892;&#21152;&#26435;&#38543;&#26426;&#26597;&#35810;<\/p>\n<p>&#22312;&#25968;&#25454;&#24211;&#25805;&#20316;&#20013;&#65292;&#26377;&#26102;&#38656;&#35201;&#26681;&#25454;&#26576;&#31181;&#26465;&#20214;&#36827;&#34892;&#21152;&#26435;&#38543;&#26426;&#26597;&#35810;&#65292;&#20197;&#20415;&#26356;&#20934;&#30830;&#22320;&#36873;&#25321;&#32467;&#26524;&#12290;Doctrine &#26159;&#19968;&#20010;&#38750;&#24120;&#27969;&#34892;&#30340; PHP ORM&#65288;&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#65289;&#24037;&#20855;&#65292;&#21487;&#20197;&#26041;&#20415;&#22320;&#19982;&#22810;&#31181;&#25968;&#25454;&#24211;&#31995;&#32479;&#20132;&#20114;&#12290;&#19979;&#38754;&#25105;&#23558;&#23637;&#31034;&#22914;&#20309;&#20351;&#29992; Doctrine &#36827;&#34892;&#21152;&#26435;&#38543;&#26426;&#26597;&#35810;&#30340;&#31034;&#20363;&#12290;<\/p>\n<p>&#39318;&#20808;&#65292;&#30830;&#20445;&#20320;&#24050;&#32463;&#23433;&#35013;&#20102; Doctrine &#21644;&#30456;&#24212;&#30340;&#25968;&#25454;&#24211;&#39537;&#21160;&#31243;&#24207;&#12290;&#20363;&#22914;&#65292;&#22914;&#26524;&#20320;&#20351;&#29992;&#30340;&#26159; MySQL&#65292;&#20320;&#38656;&#35201;&#23433;&#35013; <code>doctrine\/dbal<\/code> &#21644; <code>doctrine\/mongodb-odm-bundle<\/code>&#65288;&#22914;&#26524;&#20320;&#20351;&#29992; MongoDB&#65289;&#12290;<\/p>\n<pre><code class=\"language-bash\">composer require doctrine\/dbal doctrine\/mongodb-odm-bundle<\/code><\/pre>\n<p>&#25509;&#19979;&#26469;&#65292;&#37197;&#32622; Doctrine &#24182;&#21019;&#24314;&#19968;&#20010;&#23454;&#20307;&#31867;&#26469;&#34920;&#31034;&#20320;&#30340;&#25968;&#25454;&#27169;&#22411;&#12290;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/Entity\/Product.php\nnamespace AppEntity;\n\nuse DoctrineORMMapping as ORM;\nuse DoctrineCommonCollectionsArrayCollection;\n\n\/**\n * @ORMEntity(repositoryClass=\"AppRepositoryProductRepository\")\n *\/\nclass Product\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 $name;\n\n    \/**\n     * @ORMColumn(type=\"float\")\n     *\/\n    private $weight;\n\n    \/**\n     * @ORMOneToMany(targetEntity=\"OrderItem\", mappedBy=\"product\")\n     *\/\n    private $orderItems;\n\n    public function __construct()\n    {\n        $this-&gt;orderItems = new ArrayCollection();\n    }\n\n    \/\/ Getters and setters\n}<\/code><\/pre>\n<p>&#28982;&#21518;&#65292;&#21019;&#24314;&#19968;&#20010;&#23454;&#20307;&#20179;&#24211;&#31867;&#26469;&#22788;&#29702;&#26597;&#35810;&#36923;&#36753;&#12290;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/Repository\/ProductRepository.php\nnamespace AppRepository;\n\nuse DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository;\nuse AppEntityProduct;\n\n\/**\n * @method Product|null find($id, $lockMode = null, $lockVersion = null)\n * @method Product[]    findAll()\n * @method Product[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)\n *\/\nclass ProductRepository extends ServiceEntityRepository\n{\n    public function getRandomProductByWeight()\n    {\n        \/\/ &#21019;&#24314;&#19968;&#20010;&#26597;&#35810;&#26500;&#24314;&#22120;\n        $queryBuilder = $this-&gt;createQueryBuilder('p');\n\n        \/\/ &#28155;&#21152;&#26435;&#37325;&#25490;&#24207;\n        $queryBuilder-&gt;addSelect('p')-&gt;orderBy('p.weight', 'DESC');\n\n        \/\/ &#35774;&#32622;&#19968;&#20010;&#38543;&#26426;&#31181;&#23376;\n        $randomSeed = mt_rand(0, PHP_INT_MAX);\n        $queryBuilder-&gt;setRandomSeed($randomSeed);\n\n        \/\/ &#25191;&#34892;&#26597;&#35810;&#24182;&#33719;&#21462;&#19968;&#26465;&#35760;&#24405;\n        return $queryBuilder-&gt;setMaxResults(1)-&gt;getQuery()-&gt;getOneOrNullResult();\n    }\n}<\/code><\/pre>\n<p>&#26368;&#21518;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#20197;&#19979;&#26041;&#24335;&#35843;&#29992;&#36825;&#20010;&#26041;&#27861;&#26469;&#36827;&#34892;&#21152;&#26435;&#38543;&#26426;&#26597;&#35810;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/Controller\/ProductController.php\nnamespace AppController;\n\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationResponse;\n\nclass ProductController extends AbstractController\n{\n    public function getRandomProductAction(): Response\n    {\n        $entityManager = $this-&gt;getDoctrine()-&gt;getManager();\n\n        $randomProduct = $entityManager-&gt;getRepository(Product::class)-&gt;getRandomProductByWeight();\n\n        if ($randomProduct) {\n            return $this-&gt;render('product\/show.html.twig', [\n                'product' =&gt; $randomProduct,\n            ]);\n        } else {\n            return $this-&gt;render('product\/not_found.html.twig');\n        }\n    }\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#31034;&#20363;&#20013;&#65292;&#25105;&#20204;&#39318;&#20808;&#21019;&#24314;&#20102;&#19968;&#20010; <code>Product<\/code> &#23454;&#20307;&#31867;&#65292;&#24182;&#23450;&#20041;&#20102;&#19968;&#20010; <code>ProductRepository<\/code> &#25509;&#21475;&#26469;&#22788;&#29702;&#26597;&#35810;&#36923;&#36753;&#12290;&#28982;&#21518;&#65292;&#25105;&#20204;&#22312;&#25511;&#21046;&#22120;&#20013;&#35843;&#29992; <code>getRandomProductByWeight<\/code> &#26041;&#27861;&#26469;&#25191;&#34892;&#21152;&#26435;&#38543;&#26426;&#26597;&#35810;&#65292;&#24182;&#36820;&#22238;&#32467;&#26524;&#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>&#29702;&#35299;&#22914;&#20309;&#22312;PHP&#20013;&#20351;&#29992;Doctrine&#23454;&#29616;&#24102;&#26435;&#37325;&#30340;&#38543;&#26426;&#26597;&#35810;&#23545;&#20110;&#24076;&#26395;&#20026;&#24212;&#29992;&#31243;&#24207;&#28155;&#21152;&#38543;&#26426;&#20803;&#32032;&#30340;&#24320;&#21457;&#20154;&#21592;&#26469;&#35828;&#33267;&#20851;&#37325;&#35201;&#12290;&#36825;&#31181;&#21151;&#33021;&#29305;&#21035;&#36866;&#29992;&#20110;&#38656;&#35201;&#26576;&#20123;&#39033;&#30446;&#26377;&#26356;&#39640;&#30340;&#34987;&#36873;&#20013;&#30340;&#27010;&#29575;&#65292;&#20363;&#22914;&#20419;&#38144;&#23637;&#31034;&#12289;&#28216;&#25103;&#36923;&#36753;&#31561;&#24120;&#35265;&#38656;&#27714;&#12290;<\/p><p>&#22312;&#26412;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#23558;&#25506;&#32034;&#22914;&#20309;&#20351;&#29992;Doctrine&#32534;&#20889;&#24102;&#26377;&#26435;&#37325;&#30340;&#38543;&#26426;&#26597;&#35810;&#12290;Doctrine&#26159;&#19968;&#27454;&#29992;&#20110;PHP&#30340;&#38754;&#21521;&#23545;&#35937;&#30340;&#20851;&#31995;&#22411;&#25968;&#25454;&#24211;&#26144;&#23556;&#22120;&#65288;ORM&#65289;&#65292;&#23427;&#25552;&#20379;&#20102;&#19968;&#31181;&#24378;&#22823;&#19988;&#28789;&#27963;&#30340;&#26041;&#24335;&#26469;&#31649;&#29702;&#25968;&#25454;&#24211;&#25805;&#20316;&#12290;<\/p><h2>Weighted random selection means that each element in the population has a different probability of being chosen, based on its weight. The weighted average is then calculated by multiplying each element&#8217;s value by its corresponding weight and summing these products. This method ensures that elements with higher weights have a greater chance of being selected compared to those with lower weights.<\/h2><p>&#21152;&#26435;&#38543;&#26426;&#36873;&#25321;&#26159;&#19968;&#31181;&#32479;&#35745;&#25216;&#26415;&#65292;&#20854;&#20013;&#22312;&#19968;&#32452;&#20013;&#27599;&#20010;&#39033;&#30446;&#37117;&#20998;&#37197;&#19968;&#20010;&#26435;&#37325;&#65292;&#35813;&#26435;&#37325;&#24433;&#21709;&#23427;&#34987;&#36873;&#20013;&#30340;&#27010;&#29575;&#12290;&#36825;&#20123;&#26435;&#37325;&#24182;&#19981;&#19968;&#23450;&#38656;&#35201;&#26159;&#30334;&#20998;&#27604;&#65307;&#23427;&#20204;&#21482;&#38656;&#35201;&#19982;&#27599;&#20010;&#39033;&#30446;&#30340;&#36873;&#20013;&#20960;&#29575;&#25104;&#27604;&#20363;&#21363;&#21487;&#12290;<\/p><p>&#24819;&#35937;&#19968;&#19979;&#65292;&#20320;&#26377;&#19968;&#20010;&#25968;&#32452;&#20013;&#30340;&#39033;&#30446;&#65292;&#27599;&#20010;&#37117;&#26377;&#19968;&#20010;&#37325;&#37327;&#65292;&#36825;&#20915;&#23450;&#20102;&#23427;&#20204;&#34987;&#36873;&#25321;&#30340;&#21487;&#33021;&#24615;&#12290;&#22312;&#36827;&#34892;&#21152;&#26435;&#38543;&#26426;&#36873;&#25321;&#30340;&#36807;&#31243;&#20013;&#65292;&#26435;&#37325;&#36739;&#39640;&#30340;&#39033;&#30446;&#34987;&#36873;&#20013;&#30340;&#27010;&#29575;&#26356;&#39640;&#65292;&#32780;&#26435;&#37325;&#36739;&#20302;&#30340;&#39033;&#30446;&#21017;&#30456;&#23545;&#36739;&#23569;&#34987;&#36873;&#20013;&#12290;<\/p><h2>&#35774;&#32622;&#29615;&#22659;<\/h2><p>&#22312;&#25105;&#20204;&#28145;&#20837;&#25506;&#35752;Doctrine&#26597;&#35810;&#20043;&#21069;&#65292;&#35831;&#30830;&#20445;&#24744;&#24050;&#32463;&#20855;&#22791;&#20197;&#19979;&#26465;&#20214;&#65306;<\/p><p>&#22312;&#24744;&#30340;&#39033;&#30446;&#20013;&#35774;&#32622;Doctrine ORM&#12290;<\/p><p>&#19968;&#20010;&#20351;&#29992;Doctrine&#30340;Symfony&#39033;&#30446;&#35774;&#32622;&#65292;&#25110;&#32773;&#20219;&#20309;&#20854;&#20182;&#21487;&#20197;&#20351;&#29992;&#30340;&#39033;&#30446;&#12290;<\/p><p>&#24744;&#31995;&#32479;&#30340;PHP&#24050;&#32463;&#23433;&#35013;&#22909;&#20102;&#12290;<\/p><p>&#22914;&#26524;&#20320;&#23545;Symfony&#25110;Doctrine&#19981;&#29087;&#24713;&#65292;&#26368;&#22909;&#20808;&#21442;&#32771;&#23448;&#26041;&#30340;Symfony&#25991;&#26723;&#21644;Doctrine ORM&#25991;&#26723;&#36827;&#34892;&#21021;&#22987;&#35774;&#32622;&#12290;<\/p><h2>&#21019;&#24314;&#23454;&#20307;<\/h2><p>&#22312;Doctrine&#20013;&#65292;&#24744;&#36890;&#36807;&#23454;&#20307;&#19982;&#25968;&#25454;&#24211;&#20132;&#20114;&#65292;&#36825;&#20123;&#23454;&#20307;&#26159;&#26144;&#23556;&#21040;&#25968;&#25454;&#24211;&#34920;&#30340;PHP&#31867;&#12290;&#36825;&#37324;&#26377;&#19968;&#20010;&#31034;&#20363;&#23454;&#20307;&#65306;<code>weight<\/code>&#25105;&#20204;&#26597;&#35810;&#26102;&#20250;&#20351;&#29992;&#20197;&#19979;&#23383;&#27573;&#65306;<\/p><pre><code>use DoctrineORMMapping as ORM;\n\n\/**\n * @ORMEntity\n * @ORMTable(name=\"items\")\n *\/\nclass Item\n{\n    \/**\n     * @ORMId\n     * @ORMGeneratedValue\n     * @ORMColumn(type=\"integer\")\n     *\/\n    private $id;\n\n    \/**\n     * @ORMColumn(type=\"string\")\n     *\/\n    private $name;\n\n    \/**\n     * @ORMColumn(type=\"integer\")\n     *\/\n    private $weight;\n\n    \/\/ ... getters and setters ...\n}\n<\/code><\/pre><h2>&#22522;&#26412;&#30340;&#26435;&#37325;&#38543;&#26426;&#36873;&#25321;<\/h2><p>&#35753;&#25105;&#20204;&#20174;&#26368;&#22522;&#30784;&#30340;&#26435;&#37325;&#38543;&#26426;&#26597;&#35810;&#24320;&#22987;&#12290;&#20551;&#35774;&#25105;&#20204;&#35201;&#38543;&#26426;&#36873;&#25321;&#19968;&#20010;&#39033;&#30446;&#65292;&#32771;&#34385;&#26435;&#37325;&#12290;&#20320;&#21487;&#20197;&#36825;&#26679;&#20570;&#65306;<\/p><pre><code>use DoctrineORMEntityManagerInterface;\n\nclass ItemRepository \n{\n    private $entityManager;\n\n    public function __construct(EntityManagerInterface $entityManager)\n    {\n        $this-&gt;entityManager = $entityManager;\n    }\n\n    public function findWeightedRandom()\n    {\n        $query = $this-&gt;entityManager-&gt;createQuery(\n            'SELECT i FROM AppEntityItem i ORDER BY RAND() * i.weight DESC'\n        );\n        $query-&gt;setMaxResults(1);\n\n        return $query-&gt;getOneOrNullResult();\n    }\n}\n<\/code><\/pre><p>&#36825;&#20010;&#20195;&#30721;&#20250;&#20056;&#20197;&#20869;&#32622;&#30340;&#20540;&#12290;<code>RAND()<\/code>&#25265;&#27465;&#65292;&#25105;&#19981;&#22826;&#26126;&#30333;&#24744;&#30340;&#24847;&#24605;&#65292;&#35831;&#37325;&#26032;&#25551;&#36848;&#19968;&#19979;&#12290;<code>weight<\/code>&#25490;&#24207;&#21015;&#65292;&#25353;&#29031;&#38477;&#24207;&#25490;&#21015;&#32467;&#26524;&#65292;&#28982;&#21518;&#36873;&#25321;&#21069;&#19968;&#26465;&#32467;&#26524;&#12290;<\/p><h2>&#25552;&#39640;&#24615;&#33021;<\/h2><p>&#22312;&#19978;&#36848;&#26597;&#35810;&#26377;&#25928;&#30340;&#24773;&#20917;&#19979;&#65292;&#20294;&#23545;&#20110;&#22823;&#22411;&#25968;&#25454;&#38598;&#26469;&#35828;&#65292;&#36825;&#21487;&#33021;&#24182;&#19981;&#39640;&#25928;&#65292;&#22240;&#20026;&#38656;&#35201;&#23545;&#25972;&#20010;&#34920;&#36827;&#34892;&#25353;&#35745;&#31639;&#21015;&#25490;&#24207;&#12290;&#35753;&#25105;&#20204;&#30475;&#30475;&#22914;&#20309;&#20248;&#21270;&#36825;&#19968;&#28857;&#12290;<\/p><p>&#19968;&#31181;&#26041;&#27861;&#26159;&#23545;&#26435;&#37325;&#36827;&#34892;&#26631;&#20934;&#21270;&#65292;&#20351;&#20854;&#20195;&#34920;&#32047;&#31215;&#27010;&#29575;&#65292;&#36825;&#20351;&#24471;&#23545;&#38543;&#26426;&#39033;&#30340;&#26356;&#30452;&#35266;&#36873;&#25321;&#26356;&#20026;&#26041;&#20415;&#12290;&#28982;&#21518;&#20320;&#21487;&#20197;&#20351;&#29992;&#21333;&#20010;&#38543;&#26426;&#20540;&#26469;&#26597;&#25214;&#20855;&#26377;&#29305;&#23450;&#26435;&#37325;&#30340;&#38543;&#26426;&#39033;&#30446;&#65306;<\/p><pre><code>\/\/ ... within an appropriate method ...\n$randomValue = (float) mt_rand() \/ (float) getrandmax();\n$query = $query-&gt;createQuery('\/* complex DQL query here *\/');\n\/\/ ...\n<\/code><\/pre><p>&#23454;&#38469;&#30340;DQL&#20250;&#21462;&#20915;&#20110;&#25968;&#25454;&#24211;&#30340;&#21151;&#33021;&#21644;&#24212;&#29992;&#31243;&#24207;&#36923;&#36753;&#65292;&#20294;&#19978;&#36848;&#27010;&#36848;&#23637;&#31034;&#20102;&#22914;&#20309;&#23558;PHP&#29983;&#25104;&#30340;&#38543;&#26426;&#20540;&#38598;&#25104;&#36827;&#21435;&#12290;<\/p><h2>&#22312;&#20351;&#29992;&#21152;&#26435;&#38543;&#26426;&#26597;&#35810;&#26102;&#30340;&#32771;&#34385;&#22240;&#32032;<\/h2><p>&#35831;&#27880;&#24847;&#65292;Doctrine ORM &#23558;&#24744;&#30340;&#38754;&#21521;&#23545;&#35937;&#26597;&#35810;&#36716;&#25442;&#20026; SQL &#35821;&#21477;&#65292;&#24182;&#19988;&#24182;&#38750;&#25152;&#26377;&#25968;&#25454;&#24211;&#24179;&#21488;&#37117;&#25903;&#25345;&#25152;&#26377;&#20989;&#25968;&#25110;&#23545;&#26576;&#20123;&#26597;&#35810;&#31867;&#22411;&#20855;&#26377;&#30456;&#21516;&#30340;&#25928;&#29575;&#12290;&#22240;&#27492;&#65292;&#24744;&#32467;&#26500;&#26597;&#35810;&#30340;&#26041;&#24335;&#21644;&#20351;&#29992;&#30340;&#20989;&#25968;&#21487;&#33021;&#20250;&#26681;&#25454;&#24744;&#30340;&#25968;&#25454;&#24211;&#26381;&#21153;&#22120;&#26377;&#25152;&#19981;&#21516;&#12290;<\/p><p>&#27492;&#22806;&#65292;&#22312;&#22788;&#29702;&#22823;&#37327;&#25968;&#25454;&#24211;&#20107;&#21153;&#21644;&#26597;&#35810;&#26102;&#65292;&#20026;&#20102;&#38450;&#27490;&#24615;&#33021;&#29942;&#39048;&#65292;&#37325;&#35201;&#30340;&#26159;&#35201;&#36827;&#34892;&#26597;&#35810;&#20998;&#26512;&#24182;&#20248;&#21270;&#23427;&#20204;&#12290;Doctrine &#25552;&#20379;&#20102;&#22914;&#26597;&#35810;&#26085;&#24535;&#24037;&#20855;&#31561;&#21487;&#20197;&#24110;&#21161;&#23436;&#25104;&#36825;&#39033;&#24037;&#20316;&#30340;&#21151;&#33021;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>&#22312;&#26412;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#24050;&#32463;&#35752;&#35770;&#20102;&#20351;&#29992;Doctrine&#30340;PHP&#32534;&#20889;&#24102;&#26435;&#38543;&#26426;&#26597;&#35810;&#30340;&#22522;&#26412;&#21407;&#29702;&#12290;&#25105;&#20204;&#32771;&#34385;&#20102;&#24615;&#33021;&#24433;&#21709;&#24182;&#25552;&#20379;&#20102;&#23454;&#26045;&#27492;&#21151;&#33021;&#30340;&#36215;&#28857;&#12290;&#26377;&#20102;&#36825;&#20123;&#30693;&#35782;&#65292;&#24744;&#21487;&#20197;&#24320;&#22987;&#22312;&#24212;&#29992;&#31243;&#24207;&#20869;&#32534;&#20889;&#26356;&#21152;&#24179;&#34913;&#12289;&#20844;&#24179;&#21644;&#26377;&#36259;&#30340;&#38543;&#26426;&#36873;&#25321;&#36807;&#31243;&#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>&lt;?php<\/p>\n<p>\/\/ 1. &#21019;&#24314;&#19968;&#20010;&#31867;&#26469;&#23384;&#20648;&#25968;&#25454;\nclass User {\npublic $id;\npublic $name;<\/p>\n<pre><code>public function __construct($id, $name) {\n    $this-&gt;id = $id;\n    $this-&gt;name = $name;\n}<\/code><\/pre>\n<p>}<\/p>\n<p>\/\/ 2. &#21019;&#24314;&#19968;&#20010;&#25509;&#21475;&#26469;&#23450;&#20041;&#26597;&#35810;&#35268;&#21017;\ninterface QueryInterface {\npublic function execute();\n}<\/p>\n<p>\/\/ 3. &#23454;&#29616;&#36825;&#20010;&#25509;&#21475;&#30340;&#31867;\nclass WeightedRandomQuery implements QueryInterface {\nprivate $users;<\/p>\n<pre><code>public function __construct(array $users) {\n    $this-&gt;users = $users;\n}\n\npublic function execute() {\n    \/\/ &#36825;&#37324;&#26159;&#38543;&#26426;&#36873;&#25321;&#29992;&#25143;&#30340;&#36807;&#31243;\n    $randomIndex = rand(0, count($this-&gt;users) - 1);\n    return $this-&gt;users[$randomIndex];\n}<\/code><\/pre>\n<p>}<\/p>\n<p>\/\/ 4. &#21019;&#24314;&#19968;&#20010;&#23454;&#20363;&#24182;&#25191;&#34892;&#26597;&#35810;\n$userRepository = new UserRepository();\n$weightedRandomQuery = new WeightedRandomQuery($userRepository-&gt;findAll());\n$user = $weightedRandomQuery-&gt;execute();<\/p>\n<p>echo &#8220;Selected user: &#8221; . $user-&gt;name; \/\/ &#36755;&#20986;&#38543;&#26426;&#36873;&#20013;&#30340;&#29992;&#25143;&#30340;&#21517;&#23383;<\/p>\n<p>?&gt;<\/p>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#21019;&#24314;&#20102;&#19968;&#20010;&#21517;&#20026;<code>User<\/code>&#30340;&#31867;&#26469;&#34920;&#31034;&#29992;&#25143;&#65292;&#24182;&#19988;&#23454;&#29616;&#20102;&#19968;&#20010;&#21517;&#20026;<code>WeightedRandomQuery<\/code>&#30340;&#25509;&#21475;&#26469;&#25191;&#34892;&#38543;&#26426;&#26597;&#35810;&#12290;&#28982;&#21518;&#65292;&#25105;&#20204;&#23558;&#20004;&#20010;&#29992;&#25143;&#23545;&#35937;&#20316;&#20026;&#21442;&#25968;&#20256;&#36882;&#32473;&#20102;<code>WeightedRandomQuery<\/code>&#30340;&#26500;&#36896;&#20989;&#25968;&#12290;<\/p>\n<p>&#25509;&#30528;&#65292;&#25105;&#20204;&#20351;&#29992;<code>UserRepository<\/code>&#26469;&#33719;&#21462;&#25152;&#26377;&#29992;&#25143;&#65292;&#28982;&#21518;&#23558;&#36825;&#20123;&#29992;&#25143;&#20316;&#20026;&#19968;&#20010;&#25968;&#32452;&#20256;&#20837;&#21040;<code>WeightedRandomQuery<\/code>&#20013;&#12290;&#26368;&#21518;&#65292;&#36890;&#36807;&#35843;&#29992;<code>execute()<\/code>&#26041;&#27861;&#65292;&#25105;&#20204;&#21487;&#20197;&#24471;&#21040;&#19968;&#20010;&#38543;&#26426;&#36873;&#25321;&#30340;&#29992;&#25143;&#12290;<\/p>\n<p>&#36825;&#20010;&#31034;&#20363;&#23637;&#31034;&#20102;&#22914;&#20309;&#20351;&#29992;PHP&#21644;Doctrine&#26694;&#26550;&#26469;&#22788;&#29702;&#38543;&#26426;&#26597;&#35810;&#30340;&#38382;&#39064;&#65292;&#23427;&#32467;&#21512;&#20102;&#38754;&#21521;&#23545;&#35937;&#32534;&#31243;&#65288;&#36890;&#36807;<code>User<\/code>&#31867;&#65289;&#21644;&#25509;&#21475;\/&#25277;&#35937;&#23618;&#35774;&#35745;&#65288;&#36890;&#36807;<code>QueryInterface<\/code>&#21644;<code>WeightedRandomQuery<\/code>&#65289;&#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;&#20351;&#29992; PHP Doctrine &#36827;&#34892;&#21152;&#26435;&#38543;&#26426;&#26597;&#35810; &#22312;&#038;#259..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1127","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\/1127","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=1127"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1127"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1127"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1127"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}