{"id":954,"date":"2025-06-12T03:29:56","date_gmt":"2025-06-11T19:29:56","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/laravel\/954.html"},"modified":"2025-06-12T03:29:56","modified_gmt":"2025-06-11T19:29:56","slug":"eloquent%e4%b8%ad%e7%9a%84%e5%a4%9a%e6%80%81%e5%85%b3%e8%81%94%ef%bc%9a%e9%80%9a%e8%bf%87%e7%a4%ba%e4%be%8b%e8%a7%a3%e9%87%8a","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/954.html","title":{"rendered":"Eloquent\u4e2d\u7684\u591a\u6001\u5173\u8054\uff1a\u901a\u8fc7\u793a\u4f8b\u89e3\u91ca"},"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>Eloquent&#26159;Laravel&#26694;&#26550;&#20013;&#30340;&#19968;&#20010;&#24378;&#22823;&#24037;&#20855;&#65292;&#23427;&#20801;&#35768;&#20320;&#22312;&#25968;&#25454;&#24211;&#34920;&#20043;&#38388;&#24314;&#31435;&#22797;&#26434;&#30340;&#20851;&#32852;&#20851;&#31995;&#12290;&#20854;&#20013;&#65292;&#22810;&#24577;&#20851;&#32852;&#26159;&#19968;&#31181;&#29305;&#21035;&#30340;&#20851;&#32852;&#31867;&#22411;&#65292;&#21487;&#20197;&#22788;&#29702;&#22810;&#31181;&#19981;&#21516;&#31867;&#22411;&#30340;&#27169;&#22411;&#12290;<\/p>\n<h3>&#22810;&#24577;&#20851;&#32852;&#30340;&#22522;&#26412;&#27010;&#24565;<\/h3>\n<ul>\n<li><strong>&#22810;&#24577;&#24615;<\/strong>&#65306;&#25351;&#21516;&#19968;&#20010;&#23646;&#24615;&#21487;&#20197;&#24212;&#29992;&#20110;&#19981;&#21516;&#30340;&#31867;&#12290;<\/li>\n<li><strong>&#20851;&#32852;<\/strong>&#65306;&#34920;&#31034;&#20004;&#20010;&#23454;&#20307;&#20043;&#38388;&#30340;&#20851;&#31995;&#12290;<\/li>\n<li><strong>&#22810;&#24577;&#20851;&#32852;<\/strong>&#65306;&#24403;&#19968;&#20010;&#23454;&#20307;&#21487;&#20197;&#36890;&#36807;&#21516;&#19968;&#20010;&#23646;&#24615;&#19982;&#22810;&#20010;&#19981;&#21516;&#30340;&#23454;&#20307;&#36827;&#34892;&#20851;&#32852;&#26102;&#65292;&#36825;&#31181;&#20851;&#32852;&#31216;&#20026;&#22810;&#24577;&#20851;&#32852;&#12290;<\/li>\n<\/ul>\n<h3>&#31034;&#20363;&#65306;&#29992;&#25143;&#21644;&#35282;&#33394;&#30340;&#20851;&#31995;<\/h3>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;<code>User<\/code>&#27169;&#22411;&#21644;&#19968;&#20010;<code>Role<\/code>&#27169;&#22411;&#12290;&#27599;&#20010;&#29992;&#25143;&#21487;&#20197;&#26377;&#22810;&#20010;&#35282;&#33394;&#65292;&#32780;&#27599;&#20010;&#35282;&#33394;&#20063;&#21487;&#20197;&#23646;&#20110;&#22810;&#20010;&#29992;&#25143;&#12290;&#25105;&#20204;&#21487;&#20197;&#20351;&#29992;&#22810;&#24577;&#20851;&#32852;&#26469;&#23454;&#29616;&#36825;&#19968;&#22797;&#26434;&#30340;&#20851;&#31995;&#12290;<\/p>\n<h4>1. &#23450;&#20041;&#27169;&#22411;<\/h4>\n<p>&#39318;&#20808;&#65292;&#23450;&#20041;<code>User<\/code>&#21644;<code>Role<\/code>&#27169;&#22411;&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppModels;\n\nuse IlluminateDatabaseEloquentModel;\nuse IlluminateDatabaseEloquentRelationsHasMany;\n\nclass User extends Model\n{\n    public function roles()\n    {\n        return $this-&gt;hasMany(Role::class);\n    }\n}\n\nnamespace AppModels;\n\nuse IlluminateDatabaseEloquentModel;\nuse IlluminateDatabaseEloquentRelationsBelongsToMany;\n\nclass Role extends Model\n{\n    public function users()\n    {\n        return $this-&gt;belongsToMany(User::class);\n    }\n}<\/code><\/pre>\n<h4>2. &#21019;&#24314;&#25968;&#25454;<\/h4>\n<p>&#25509;&#19979;&#26469;&#65292;&#21019;&#24314;&#19968;&#20123;&#31034;&#20363;&#25968;&#25454;&#26469;&#27979;&#35797;&#22810;&#24577;&#20851;&#32852;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ &#21019;&#24314;&#29992;&#25143;\n$user = new User();\n$user-&gt;name = 'John Doe';\n$user-&gt;save();\n\n\/\/ &#21019;&#24314;&#35282;&#33394;\n$role1 = new Role();\n$role1-&gt;name = 'Admin';\n$role1-&gt;save();\n\n$role2 = new Role();\n$role2-&gt;name = 'Editor';\n$role2-&gt;save();\n\n\/\/ &#23558;&#29992;&#25143;&#28155;&#21152;&#21040;&#35282;&#33394;\n$user-&gt;roles()-&gt;attach($role1);\n$user-&gt;roles()-&gt;attach($role2);\n\n\/\/ &#23558;&#35282;&#33394;&#28155;&#21152;&#21040;&#29992;&#25143;\n$role1-&gt;users()-&gt;attach($user);\n$role2-&gt;users()-&gt;attach($user);<\/code><\/pre>\n<h4>3. &#26597;&#35810;&#25968;&#25454;<\/h4>\n<p>&#29616;&#22312;&#65292;&#25105;&#20204;&#21487;&#20197;&#26597;&#35810;&#29992;&#25143;&#21644;&#35282;&#33394;&#30340;&#25968;&#25454;&#65292;&#24182;&#39564;&#35777;&#22810;&#24577;&#20851;&#32852;&#26159;&#21542;&#27491;&#24120;&#24037;&#20316;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ &#26597;&#35810;&#25152;&#26377;&#29992;&#25143;&#21450;&#20854;&#35282;&#33394;\n$users = User::with('roles')-&gt;get();\n\nforeach ($users as $user) {\n    echo \"User: {$user-&gt;name}n\";\n    foreach ($user-&gt;roles as $role) {\n        echo \"  Role: {$role-&gt;name}n\";\n    }\n}<\/code><\/pre>\n<p>&#36755;&#20986;&#32467;&#26524;&#23558;&#20250;&#26159;&#65306;<\/p>\n<pre><code>User: John Doe\n  Role: Admin\n  Role: Editor<\/code><\/pre>\n<h3>&#24635;&#32467;<\/h3>\n<p>&#36890;&#36807;&#19978;&#36848;&#31034;&#20363;&#65292;&#25105;&#20204;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312;Laravel&#20013;&#20351;&#29992;&#22810;&#24577;&#20851;&#32852;&#26469;&#22788;&#29702;&#22797;&#26434;&#30340;&#20851;&#32852;&#20851;&#31995;&#12290;&#22810;&#24577;&#20851;&#32852;&#20351;&#24471;&#25105;&#20204;&#30340;&#27169;&#22411;&#26356;&#21152;&#28789;&#27963;&#21644;&#24378;&#22823;&#65292;&#33021;&#22815;&#26356;&#22909;&#22320;&#36866;&#24212;&#21508;&#31181;&#24212;&#29992;&#22330;&#26223;&#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>Laravel&#30340;Eloquent ORM&#20013;&#30340;&#22810;&#24577;&#20851;&#31995;&#25552;&#20379;&#20102;&#19968;&#31181;&#35774;&#32622;&#21333;&#20010;&#20851;&#32852;&#21040;&#19981;&#21516;&#27169;&#22411;&#30340;&#26041;&#27861;&#12290;&#26412;&#25351;&#21335;&#23558;&#24102;&#20320;&#20102;&#35299;&#22810;&#24577;&#20851;&#31995;&#30340;&#27010;&#24565;&#65292;&#23637;&#31034;&#20195;&#30721;&#31034;&#20363;&#24182;&#35299;&#37322;&#22914;&#20309;&#22312;&#20320;&#30340;Laravel&#24212;&#29992;&#31243;&#24207;&#20013;&#20351;&#29992;&#23427;&#20204;&#12290;<\/p><h2>&#29702;&#35299;&#22810;&#24577;&#20851;&#31995;<\/h2><p>&#22312;Eloquent&#20013;&#65292;&#19968;&#20010;&#27169;&#22411;&#21487;&#20197;&#23646;&#20110;&#21478;&#19968;&#20010;&#27169;&#22411;&#30340;&#22810;&#20010;&#20851;&#32852;&#20013;&#30340;&#20851;&#31995;&#34987;&#31216;&#20026;&#22810;&#23545;&#19968;&#20851;&#31995;&#65288;polymorphic relationship&#65289;&#12290;&#20856;&#22411;&#30340;&#20363;&#23376;&#21253;&#25324;&#35780;&#35770;&#25110;&#25991;&#20214;&#65292;&#36825;&#20123;&#23545;&#35937;&#21487;&#20197;&#22312;&#24086;&#23376;&#12289;&#35270;&#39057;&#25110;&#20854;&#20182;&#20219;&#20309;&#31867;&#22411;&#30340;&#23545;&#35937;&#19978;&#36827;&#34892;&#20851;&#32852;&#12290;&#35201;&#29702;&#35299;&#36825;&#19968;&#28857;&#65292;&#35831;&#35753;&#25105;&#20204;&#20174;&#19968;&#20010;&#22522;&#26412;&#30340;&#20363;&#23376;&#24320;&#22987;&#65306;&#35774;&#32622;&#19968;&#20010;&#22810;&#23545;&#19968;&#20851;&#31995;&#65306;&#24314;&#31435;&#19968;&#20010;&#27169;&#22411;&#20043;&#38388;&#30340;&#22810;&#23545;&#19968;&#20851;&#31995;&#12290;<code>Comment<\/code>&#27169;&#29305;&#21644;&#27169;&#29305;&#20799;<code>Post<\/code>and &#26159;&#20013;&#25991;&#37324;&#30340;&ldquo;&#24182;&#19988;&rdquo;&#30340;&#24847;&#24605;&#12290;<code>Video<\/code>&#22909;&#30340;&#65292;&#35831;&#25552;&#20379;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<\/p><pre><code>class Comment extends Model\n{\n    public function commentable()\n    {\n        return $this-&gt;morphTo();\n    }\n}\n\nclass Post extends Model\n{\n    public function comments()\n    {\n        return $this-&gt;morphMany('AppComment', 'commentable');\n    }\n}\n\nclass Video extends Model\n{\n    public function comments()\n    {\n        return $this-&gt;morphMany('AppComment', 'commentable');\n    }\n}\n<\/code><\/pre><p>&#22312;&#25968;&#25454;&#24211;&#20013;&#65292;&#24744;&#30340;<code>comments<\/code>&#34920;&#26684;&#21487;&#33021;&#26377;&#19968;&#20010;&#31867;&#20284;&#20110;&#36825;&#26679;&#30340;&#32467;&#26500;&#65306;<\/p><pre><code>Schema::create('comments', function (Blueprint $table) {\n    $table-&gt;id();\n    $table-&gt;text('body');\n    $table-&gt;morphs('commentable');\n    $table-&gt;timestamps();\n});\n<\/code><\/pre><p>&#36825;&#23558;&#21019;&#24314;&#20004;&#20010;&#39069;&#22806;&#30340;&#21015;&#65306;<code>commentable_type<\/code>&#21644;&#25105;&#26377;&#20160;&#20040;&#20107;&#21527;&#65311;<code>commentable_id<\/code>&#25265;&#27465;&#65292;&#25105;&#19981;&#22826;&#26126;&#30333;&#20320;&#30340;&#24847;&#24605;&#65292;&#35831;&#37325;&#26032;&#25551;&#36848;&#19968;&#19979;&#20320;&#30340;&#38382;&#39064;&#25110;&#32773;&#38656;&#27714;&#12290;<code>commentable_type<\/code>&#21015;&#23558;&#23384;&#20648;&#19982;&#30456;&#20851;&#27169;&#22411;&#20851;&#32852;&#30340;&#31867;&#21517;&#12290;<code>commentable_id<\/code>&#23384;&#20648;&#30456;&#20851;&#35760;&#24405;&#30340;ID&#12290;&#20351;&#29992;&#36825;&#31181;&#35774;&#32622;&#65292;&#20320;&#29616;&#22312;&#21487;&#20197;&#23545;&#20219;&#20309;&#24744;&#35774;&#32622;&#20102;&#22810;&#24577;&#20851;&#32852;&#27169;&#22411;&#30340;&#34920;&#21457;&#24067;&#35780;&#35770;&#12290;<\/p><h2>&#26816;&#32034;&#24182;&#20351;&#29992;&#22810;&#24577;&#20851;&#31995;<\/h2><p>&#35753;&#25105;&#20204;&#29616;&#22312;&#30475;&#30475;&#22914;&#20309;&#26816;&#32034;&#21644;&#22788;&#29702;&#36825;&#31181;&#20851;&#31995;&#12290;&#20363;&#22914;&#65292;&#35201;&#33719;&#21462;&#19982;&#24086;&#23376;&#30456;&#20851;&#30340;&#35780;&#35770;&#65306;<\/p><pre><code>$post = Post::find(1);\nforeach ($post-&gt;comments as $comment) {\n  echo $comment-&gt;body;\n}\n<\/code><\/pre><p>&#23545;&#20110;&#35270;&#39057;&#65292;&#20063;&#21487;&#20197;&#36825;&#26679;&#20570;&#12290;<\/p><pre><code>$video = Video::find(1);\nforeach ($video-&gt;comments as $comment) {\n  echo $comment-&gt;body;\n}\n<\/code><\/pre><h2>&#39640;&#32423;&#20851;&#31995;&#65306;&#24418;&#24577;&#22270;&#21644;&#33258;&#23450;&#20041;&#38190;<\/h2><p>Laravel &#20801;&#35768;&#24744;&#20351;&#29992;&#33258;&#23450;&#20041;&#31867;&#22411;&#23383;&#27573;&#21517;&#31216;&#65292;&#36890;&#36807;&#20351;&#29992;morph maps &#26469;&#23454;&#29616;&#12290;&#36825;&#21487;&#20197;&#24110;&#21161;&#36991;&#20813;&#22312;&#25968;&#25454;&#24211;&#20013;&#23384;&#20648;&#23436;&#20840;&#38480;&#23450;&#30340;&#31867;&#21517;&#12290;&#35753;&#25105;&#20204;&#30475;&#30475;&#22914;&#20309;&#23450;&#20041;&#21644;&#21033;&#29992;&#19968;&#20010;morph map&#65306;<\/p><pre><code>use IlluminateDatabaseEloquentRelationsRelation;\n\nRelation::morphMap([\n  'posts' =&gt; 'AppPost',\n  'videos' =&gt; 'AppVideo',\n]);\n<\/code><\/pre><p>&#29616;&#22312;&#65292;&#32780;&#19981;&#26159;Laravel&#23384;&#20648;&#23436;&#25972;&#30340;&#27169;&#22411;&#31867;&#21517;&#65292;&#22312;&#36825;&#37324;&#25105;&#20204;&#20351;&#29992;&#19968;&#20010;&#26356;&#28789;&#27963;&#30340;&#26041;&#27861;&#26469;&#33719;&#21462;&#27169;&#22411;&#23454;&#20363;&#12290;<code>commentable_type<\/code>&#23427;&#20250;&#20174;morph&#26144;&#23556;&#20013;&#23384;&#20648;&#33258;&#23450;&#20041;&#38190;&#12290;ID&#20063;&#21487;&#20197;&#35774;&#32622;&#20026;&#33258;&#23450;&#20041;&#38190;&#65306;<\/p><pre><code>return $this-&gt;morphMany('AppComment', 'commentable', 'model_type', 'model_id');\n<\/code><\/pre><p>&#36825;&#25913;&#21464;&#20102;Laravel&#26597;&#25214;&#21015;&#30340;&#21517;&#31216;&#65292;&#20174;&#40664;&#35748;&#20540;&#12290;<code>commentable_type<\/code>and &#26159;&ldquo;&#24182;&#19988;&rdquo;&#30340;&#24847;&#24605;&#12290;<code>commentable_id<\/code>&#27809;&#26377;&#25910;&#21040;&#24744;&#30340;&#28040;&#24687;&#65292;&#35831;&#38382;&#26377;&#20160;&#20040;&#25105;&#21487;&#20197;&#24110;&#21161;&#24744;&#30340;&#21527;&#65311;<code>model_type<\/code>and &#26159;&#20013;&#25991;&#20013;&#30340;&ldquo;&#21644;&rdquo;&#65292;&#34920;&#31034;&#36830;&#25509;&#20004;&#20010;&#20107;&#29289;&#25110;&#27010;&#24565;&#30340;&#36830;&#35789;&#12290;<code>model_id<\/code>&#22909;&#30340;&#65292;&#35831;&#21457;&#36865;&#20320;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<\/p><h2>&#22810;&#23545;&#22810;&#32858;&#21512;&#20851;&#31995;<\/h2><p>Eloquent&#20063;&#25903;&#25345;&ldquo;&#30001;&#35768;&#22810;&#22609;&#36896;&rdquo;&#30340;&#20851;&#31995;&#65292;&#36825;&#20801;&#35768;&#24744;&#25317;&#26377;&#19968;&#20010;&#35768;&#22810;&#21040;&#35768;&#22810;&#22810;&#24577;&#20851;&#32852;&#12290;&#36890;&#24120;&#29992;&#20110;&#22914;&#26631;&#31614;&#36825;&#26679;&#30340;&#22330;&#26223;&#65292;&#36825;&#20123;&#26631;&#31614;&#21487;&#20197;&#23646;&#20110;&#19981;&#21516;&#30340;&#27169;&#22411;&#20013;&#30340;&#20219;&#20309;&#25968;&#37327;&#12290;&#35774;&#32622;&#22914;&#19979;&#25152;&#31034;&#65306;<\/p><pre><code>class Tag extends Model\n{\n    public function posts()\n    {\n        return $this-&gt;morphedByMany('AppPost', 'taggable');\n    }\n    public function videos()\n    {\n        return $this-&gt;morphedByMany('AppVideo', 'taggable');\n    }\n}\n\nclass Post extends Model\n{\n    public function tags()\n    {\n        return $this-&gt;morphToMany('AppTag', 'taggable');\n    }\n}\n\nclass Video extends Model\n{\n    public function tags()\n    {\n        return $this-&gt;morphToMany('AppTag', 'taggable');\n    }\n}\n<\/code><\/pre><p>&#29992;&#20110;&#23384;&#20648;&#25968;&#25454;&#65292;&#20320;&#38656;&#35201;&#19968;&#20010;&#20013;&#38388;&#34920;&#65292;&#21487;&#33021;&#21629;&#21517;&#20026;<code>taggables<\/code>&#22909;&#30340;&#65292;&#35831;&#25552;&#20379;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<\/p><pre><code>Schema::create('taggables', function (Blueprint $table) {\n    $table-&gt;id();\n    $table-&gt;morphs('taggable');\n    $table-&gt;unsignedBigInteger('tag_id');\n    $table-&gt;timestamps();\n});\n<\/code><\/pre><p>&#35201;&#33719;&#21462;&#24086;&#23376;&#30340;&#25152;&#26377;&#26631;&#31614;&#65292;&#20320;&#21487;&#20197;&#31616;&#21333;&#22320;&#20351;&#29992;&#65306;<\/p><pre><code>$post = Post::find(1);\nforeach ($post-&gt;tags as $tag) {\n  echo $tag-&gt;name;\n}\n<\/code><\/pre><h2>&#22810;&#23545;&#22810;&#22810;&#24577;&#20851;&#31995;&#65306;&#33258;&#23450;&#20041;&#36879;&#35270;&#23646;&#24615;<\/h2><p>&#33258;&#23450;&#20041;&#36879;&#35270;&#23646;&#24615;&#21487;&#20197;&#22312;&#22810;&#23545;&#22810;&#32858;&#21512;&#20851;&#31995;&#65288;polymorphic relation&#65289;&#19978;&#35775;&#38382;&#25110;&#20998;&#37197;&#65292;&#23601;&#20687;&#26631;&#20934;&#30340;&#22810;&#23545;&#22810;&#20851;&#31995;&#19968;&#26679;&#12290;&#36825;&#24847;&#21619;&#30528;&#22312;&#36879;&#35270;&#34920;&#20013;&#21487;&#20197;&#26377;&#39069;&#22806;&#20851;&#20110;&#35813;&#20851;&#31995;&#30340;&#25968;&#25454;&#65292;&#24182;&#26041;&#20415;&#22320;&#36827;&#34892;&#20132;&#20114;&#65306;<\/p><pre><code>\/\/ When attaching a tag\n$post-&gt;tags()-&gt;attach($tagId, ['custom_attribute' =&gt; 'value']);\n\n\/\/ When retrieving pivot data\nforeach ($post-&gt;tags as $tag) {\n  echo $tag-&gt;pivot-&gt;custom_attribute;\n}\n<\/code><\/pre><h2>&#32467;&#35770;&#12290;<\/h2><p>&#22810;&#24577;&#20851;&#31995;&#65288;Polymerous Relations&#65289;&#22312;Eloquent ORM&#20013;&#26159;&#19968;&#31181;&#24378;&#22823;&#30340;&#19988;&#28789;&#27963;&#30340;&#29305;&#24615;&#65292;&#33021;&#22815;&#26377;&#25928;&#22320;&#31649;&#29702;&#22797;&#26434;&#30340;&#25968;&#25454;&#32467;&#26500;&#21644;&#20851;&#31995;&#65292;&#20174;&#32780;&#22312;Laravel&#24212;&#29992;&#20013;&#20248;&#38597;&#22320;&#36827;&#34892;&#25968;&#25454;&#24211;&#35774;&#35745;&#12290;&#23427;&#20204;&#20801;&#35768;&#32534;&#20889;&#26356;&#21487;&#37325;&#29992;&#21644;&#25277;&#35937;&#21270;&#30340;&#20195;&#30721;&#65292;&#24182;&#26174;&#33879;&#31616;&#21270;&#25968;&#25454;&#24211;&#35774;&#35745;&#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><code>Eloquent<\/code> &#26159; Laravel &#30340; ORM&#65288;&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#65289;&#24211;&#30340;&#19968;&#37096;&#20998;&#65292;&#23427;&#25552;&#20379;&#20102;&#28789;&#27963;&#30340;&#20851;&#32852;&#21644;&#20851;&#32852;&#25805;&#20316;&#12290;&#20854;&#20013;&#30340;&#19968;&#20010;&#26680;&#24515;&#27010;&#24565;&#26159; <code>hasMany<\/code> &#21644; <code>hasMany<\/code> &#20851;&#32852;&#12290;<\/p>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#29992;&#25143;&#27169;&#22411; <code>User<\/code> &#21644;&#19968;&#20010;&#24086;&#23376;&#27169;&#22411; <code>Post<\/code>&#12290;&#25105;&#20204;&#21487;&#20197;&#20351;&#29992; <code>hasMany<\/code> &#25110; <code>hasMany<\/code> &#20851;&#32852;&#26469;&#23450;&#20041;&#19968;&#20010; <code>User<\/code> &#21487;&#33021;&#26377;&#22810;&#20010; <code>Post<\/code>&#65292;&#25110;&#32773;&#19968;&#20010; <code>Post<\/code> &#21487;&#33021;&#23646;&#20110;&#19968;&#20010; <code>User<\/code>&#12290;<\/p>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<pre><code class=\"language-php\">use IlluminateSupportFacadesDB;\n\nclass User extends Model\n{\n    public function posts()\n    {\n        return $this-&gt;hasMany(Post::class);\n    }\n}\n\nclass Post\n{\n    public function user()\n    {\n        return $this-&gt;belongsTo(User::class);\n    }\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65306;<\/p>\n<ul>\n<li><code>User<\/code> &#27169;&#22411;&#20855;&#26377; <code>posts<\/code> &#23646;&#24615;&#65292;&#36825;&#34920;&#31034; <code>User<\/code> &#23545;&#24212;&#30340;&#27599;&#19968;&#26465; <code>Post<\/code> &#37117;&#20250;&#20316;&#20026;&#19968;&#20010;&#20851;&#32852;&#39033;&#23384;&#20648;&#12290;<\/li>\n<li><code>Post<\/code> &#27169;&#22411;&#20855;&#26377; <code>user<\/code> &#23646;&#24615;&#65292;&#36825;&#34920;&#31034;&#27599;&#20010; <code>Post<\/code> &#23545;&#24212;&#30340; <code>User<\/code> &#37117;&#20250;&#34987;&#23384;&#20648;&#20026;&#19968;&#20010;&#20851;&#32852;&#39033;&#12290;<\/li>\n<\/ul>\n<h3>&#22914;&#20309;&#29702;&#35299; <code>hasMany<\/code> &#21644; <code>hasMany<\/code><\/h3>\n<p><code>hasMany<\/code> &#34920;&#31034;&#19968;&#20010;&#20851;&#32852;&#21487;&#20197;&#25351;&#21521;&#21478;&#19968;&#20010;&#20851;&#32852;&#30340;&#22810;&#20010;&#23454;&#20363;&#65292;&#32780; <code>hasMany<\/code> &#21017;&#34920;&#31034;&#19968;&#20010;&#20851;&#32852;&#21482;&#33021;&#25351;&#21521;&#21478;&#19968;&#20010;&#20851;&#32852;&#30340;&#21333;&#20010;&#23454;&#20363;&#12290;<\/p>\n<p>&#20363;&#22914;&#65292;&#22914;&#26524;&#20320;&#26377;&#19968;&#20010;&#29992;&#25143;&#21487;&#20197;&#25317;&#26377;&#22810;&#20010;&#24086;&#23376;&#65292;&#37027;&#20040;&#20320;&#21487;&#20197;&#36825;&#26679;&#20851;&#32852;&#65306;<\/p>\n<pre><code class=\"language-php\">$user = new User();\n$post1 = new Post();\n$post2 = new Post();\n\n$user-&gt;posts()-&gt;save($post1);\n$user-&gt;posts()-&gt;save($post2);\n\n\/\/ &#36825;&#37324;&#65292;$user-&gt;posts() &#36820;&#22238;&#30340;&#26159;&#19968;&#20010;&#20851;&#32852;&#25968;&#32452;&#65292;&#21253;&#21547;&#20102;&#20004;&#20010;&#20803;&#32032;&#12290;\n\/\/ &#22240;&#27492;&#65292;&#20320;&#21487;&#20197;&#36941;&#21382;&#36825;&#20010;&#25968;&#32452;&#24182;&#35775;&#38382; $post1 &#21644; $post2 &#30340;&#23646;&#24615;&#12290;\nforeach ($user-&gt;posts as $post) {\n    var_dump($post); \/\/ &#36755;&#20986;&#65306;object(Post)#4 (3) { [\"id\"]=&gt; string(1) \"1\" [\"created_at\"]=&gt; string(19) \"2022-08-20 15:36:47\" [\"updated_at\"]=&gt; string(19) \"2022-08-20 15:36:47\" } [\"id\"]=&gt; string(1) \"2\" [\"created_at\"]=&gt; string(19) \"2022-08-20 15:36:47\" [\"updated_at\"]=&gt; string(19) \"2022-08-20 15:36:47\" }<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;<code>$user-&gt;posts()<\/code> &#36820;&#22238;&#30340;&#26159;&#19968;&#20010;&#20851;&#32852;&#25968;&#32452;&#65292;&#21253;&#21547;&#20102;&#20004;&#20010;&#20803;&#32032;&#12290;&#20320;&#21487;&#20197;&#36941;&#21382;&#36825;&#20010;&#25968;&#32452;&#24182;&#35775;&#38382; <code>$post1<\/code> &#21644; <code>$post2<\/code> &#30340;&#23646;&#24615;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; Eloquent&#26159;Laravel&#26694;&#26550;&#20013;&#30340;&#19968;&#20010;&#24378;&#22823;&#24037;&#20855;&#65292;&#23427;&#20801;&#038;#357..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[44],"tuisongtax":[],"class_list":["post-954","my1js","type-my1js","status-publish","hentry","my1js2nav-laravel"],"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\/954","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=954"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=954"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=954"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=954"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}