{"id":775,"date":"2025-06-11T23:24:45","date_gmt":"2025-06-11T15:24:45","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/laravel\/775.html"},"modified":"2025-06-11T23:24:45","modified_gmt":"2025-06-11T15:24:45","slug":"laravel-eloquent%ef%bc%9a%e5%9c%a8%e5%90%8c%e4%b8%80%e4%b8%aa%e8%a1%a8%e4%b8%ad%e5%ad%98%e5%82%a8%e5%88%86%e7%b1%bb%e5%92%8c%e5%ad%90%e5%88%86%e7%b1%bb","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/775.html","title":{"rendered":"Laravel + Eloquent\uff1a\u5728\u540c\u4e00\u4e2a\u8868\u4e2d\u5b58\u50a8\u5206\u7c7b\u548c\u5b50\u5206\u7c7b"},"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; Laravel &#21644; Eloquent &#22312;&#21516;&#19968;&#20010;&#34920;&#20013;&#23384;&#20648;&#20998;&#31867;&#21644;&#23376;&#20998;&#31867;<\/p>\n<p>&#22312; Laravel &#20013;&#65292;&#25105;&#20204;&#21487;&#20197;&#20351;&#29992; Eloquent &#27169;&#22411;&#26469;&#31649;&#29702;&#25968;&#25454;&#24211;&#20013;&#30340;&#25968;&#25454;&#12290;&#20026;&#20102;&#22312;&#19968;&#20010;&#34920;&#20013;&#21516;&#26102;&#23384;&#20648;&#20998;&#31867;&#21644;&#23376;&#20998;&#31867;&#65292;&#25105;&#20204;&#21487;&#20197;&#21019;&#24314;&#20004;&#20010;&#27169;&#22411;&#65292;&#24182;&#36890;&#36807;&#20851;&#31995;&#65288;relationship&#65289;&#23558;&#23427;&#20204;&#20851;&#32852;&#36215;&#26469;&#12290;<\/p>\n<h3>1. &#21019;&#24314;&#20998;&#31867;&#27169;&#22411;<\/h3>\n<p>&#39318;&#20808;&#65292;&#25105;&#20204;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#20998;&#31867;&#27169;&#22411;&#12290;&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010; <code>Category<\/code> &#34920;&#65292;&#20854;&#20013;&#21253;&#21547; <code>id<\/code>&#12289;<code>name<\/code> &#21644; <code>parent_id<\/code> &#23383;&#27573;&#12290;<\/p>\n<pre><code class=\"language-bash\">php artisan make:model Category<\/code><\/pre>\n<p>&#25171;&#24320; <code>app\/Models\/Category.php<\/code> &#25991;&#20214;&#24182;&#28155;&#21152;&#20197;&#19979;&#20195;&#30721;&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppModels;\n\nuse IlluminateDatabaseEloquentModel;\nuse IlluminateDatabaseEloquentRelationsHasMany;\n\nclass Category extends Model\n{\n    \/\/ &#20851;&#31995;&#23450;&#20041;\n    public function children()\n    {\n        return $this-&gt;hasMany(Category::class, 'parent_id');\n    }\n}<\/code><\/pre>\n<h3>2. &#21019;&#24314;&#23376;&#20998;&#31867;&#27169;&#22411;<\/h3>\n<p>&#25509;&#19979;&#26469;&#65292;&#25105;&#20204;&#21019;&#24314;&#19968;&#20010;&#23376;&#20998;&#31867;&#27169;&#22411;&#12290;&#36825;&#20010;&#27169;&#22411;&#24212;&#35813;&#32487;&#25215;&#33258; <code>Category<\/code> &#27169;&#22411;&#12290;<\/p>\n<pre><code class=\"language-bash\">php artisan make:model SubCategory<\/code><\/pre>\n<p>&#25171;&#24320; <code>app\/Models\/SubCategory.php<\/code> &#25991;&#20214;&#24182;&#28155;&#21152;&#20197;&#19979;&#20195;&#30721;&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppModels;\n\nuse AppModelsCategory;\nuse IlluminateDatabaseEloquentModel;\n\nclass SubCategory extends Category\n{\n    \/\/ &#20851;&#31995;&#23450;&#20041;\n    public function parent()\n    {\n        return $this-&gt;belongsTo(Category::class);\n    }\n}<\/code><\/pre>\n<h3>3. &#21019;&#24314;&#25511;&#21046;&#22120;<\/h3>\n<p>&#29616;&#22312;&#65292;&#25105;&#20204;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#25511;&#21046;&#22120;&#26469;&#22788;&#29702;&#20998;&#31867;&#21644;&#23376;&#20998;&#31867;&#30340;&#21019;&#24314;&#21644;&#26356;&#26032;&#25805;&#20316;&#12290;<\/p>\n<pre><code class=\"language-bash\">php artisan make:controller CategoryController<\/code><\/pre>\n<p>&#25171;&#24320; <code>app\/Http\/Controllers\/CategoryController.php<\/code> &#25991;&#20214;&#24182;&#28155;&#21152;&#20197;&#19979;&#20195;&#30721;&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppHttpControllers;\n\nuse AppModelsCategory;\nuse AppModelsSubCategory;\nuse IlluminateHttpRequest;\n\nclass CategoryController extends Controller\n{\n    public function index()\n    {\n        $categories = Category::with('children')-&gt;get();\n        return view('categories.index', compact('categories'));\n    }\n\n    public function create()\n    {\n        return view('categories.create');\n    }\n\n    public function store(Request $request)\n    {\n        $category = new Category;\n        $category-&gt;name = $request-&gt;input('name');\n\n        if ($request-&gt;hasFile('image')) {\n            $category-&gt;image = $request-&gt;file('image')-&gt;store('images');\n        }\n\n        $category-&gt;save();\n\n        return redirect()-&gt;route('categories.index');\n    }\n\n    public function edit(Category $category)\n    {\n        return view('categories.edit', compact('category'));\n    }\n\n    public function update(Request $request, Category $category)\n    {\n        $category-&gt;name = $request-&gt;input('name');\n\n        if ($request-&gt;hasFile('image')) {\n            $category-&gt;image = $request-&gt;file('image')-&gt;store('images');\n        }\n\n        $category-&gt;save();\n\n        return redirect()-&gt;route('categories.index');\n    }\n\n    public function destroy(Category $category)\n    {\n        $category-&gt;delete();\n        return redirect()-&gt;route('categories.index');\n    }\n}<\/code><\/pre>\n<h3>4. &#21019;&#24314;&#35270;&#22270;<\/h3>\n<p>&#26368;&#21518;&#65292;&#25105;&#20204;&#38656;&#35201;&#21019;&#24314;&#30456;&#24212;&#30340;&#35270;&#22270;&#25991;&#20214;&#26469;&#26174;&#31034;&#21644;&#32534;&#36753;&#20998;&#31867;&#21644;&#23376;&#20998;&#31867;&#12290;<\/p>\n<h4>&#35270;&#22270;&#27169;&#26495;&#65288;resources\/views\/categories\/index.blade.php&#65289;<\/h4>\n<pre><code class=\"language-html\">@extends('layouts.app')\n\n@section('content')\n&lt;h1&gt;&#20998;&#31867;&#21015;&#34920;&lt;\/h1&gt;\n&lt;ul&gt;\n    @foreach ($categories as $category)\n        &lt;li&gt;{{ $category-&gt;name }}\n            @if ($category-&gt;children-&gt;count())\n                &lt;ul&gt;\n                    @foreach ($category-&gt;children as $child)\n                        &lt;li&gt;{{ $child-&gt;name }}&lt;\/li&gt;\n                    @endforeach\n                &lt;\/ul&gt;\n            @endif\n        &lt;\/li&gt;\n    @endforeach\n&lt;\/ul&gt;\n\n&lt;a href=\"{{ route('categories.create') }}\"&gt;&#28155;&#21152;&#26032;&#20998;&#31867;&lt;\/a&gt;\n@endsection<\/code><\/pre>\n<h4>&#35270;&#22270;&#27169;&#26495;&#65288;resources\/views\/categories\/create.blade.php&#65289;<\/h4>\n<pre><code class=\"language-html\">@extends('layouts.app')\n\n@section('content')\n&lt;h1&gt;&#28155;&#21152;&#26032;&#20998;&#31867;&lt;\/h1&gt;\n&lt;form action=\"{{ route('categories.store') }}\" method=\"POST\" enctype=\"multipart\/form-data\"&gt;\n    @csrf\n    &lt;div class=\"form-group\"&gt;\n        &lt;label for=\"name\"&gt;&#21517;&#31216;&lt;\/label&gt;\n        &lt;input type=\"text\" id=\"name\" name=\"name\" required&gt;\n    &lt;\/div&gt;\n    &lt;div class=\"form-group\"&gt;\n        &lt;label for=\"image\"&gt;&#22270;&#29255;&lt;\/label&gt;\n        &lt;input type=\"file\" id=\"image\" name=\"image\"&gt;\n    &lt;\/div&gt;\n    &lt;button type=\"submit\"&gt;&#20445;&#23384;&lt;\/button&gt;\n&lt;\/form&gt;\n&lt;a href=\"{{ route('categories.index') }}\"&gt;&#36820;&#22238;&#20998;&#31867;&#21015;&#34920;&lt;\/a&gt;\n@endsection<\/code><\/pre>\n<h4>&#35270;&#22270;&#27169;&#26495;&#65288;resources\/views\/categories\/edit.blade.php&#65289;<\/h4>\n<pre><code class=\"language-html\">@extends('layouts.app')\n\n@section('content')\n&lt;h1&gt;&#32534;&#36753;&#20998;&#31867;&lt;\/h1&gt;\n&lt;form action=\"{{ route('categories.update', $category) }}\" method=\"POST\" enctype=\"multipart\/form-data\"&gt;\n    @csrf\n    @method('PUT')\n    &lt;div class=\"form-group\"&gt;\n        &lt;label for=\"name\"&gt;&#21517;&#31216;&lt;\/label&gt;\n        &lt;input type=\"text\" id=\"name\" name=\"name\" value=\"{{ $category-&gt;name }}\" required&gt;\n    &lt;\/div&gt;\n    &lt;div class=\"form-group\"&gt;\n        &lt;label for=\"image\"&gt;&#22270;&#29255;&lt;\/label&gt;\n        &lt;input type=\"file\" id=\"image\" name=\"image\"&gt;\n    &lt;\/div&gt;\n    &lt;button type=\"submit\"&gt;&#20445;&#23384;&lt;\/button&gt;\n&lt;\/form&gt;\n&lt;a href=\"{{ route('categories.index') }}\"&gt;&#36820;&#22238;&#20998;&#31867;&#21015;&#34920;&lt;\/a&gt;\n@endsection<\/code><\/pre>\n<h3>&#24635;&#32467;<\/h3>\n<p>&#36890;&#36807;&#20197;&#19978;&#27493;&#39588;&#65292;&#25105;&#20204;&#25104;&#21151;&#22320;&#22312; Laravel &#21644; Eloquent &#20013;&#23454;&#29616;&#20102;&#22312;&#21516;&#19968;&#34920;&#20013;&#23384;&#20648;&#20998;&#31867;&#21644;&#23376;&#20998;&#31867;&#30340;&#21151;&#33021;&#12290;&#36825;&#26679;&#21487;&#20197;&#25552;&#39640;&#25968;&#25454;&#30340;&#23436;&#25972;&#24615;&#21644;&#32452;&#32455;&#24615;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--2\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/zp-400x300.jpg\" alt=\"&#40657;&#26495;Bug&#35762;&#24072;\" class=\"wp-image-1849\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#40657;&#26495;Bug&#35762;&#24072;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<body><h2>&#20171;&#32461;<\/h2><p>&#22312;&#20256;&#32479;&#25968;&#25454;&#24211;&#20013;&#65292;&#21487;&#33021;&#20250;&#20351;&#29992;&#20004;&#20010;&#34920;&#26469;&#32452;&#32455;&#31867;&#21035;&#21644;&#23376;&#31867;&#21035;&#65306;&#19968;&#20010;&#29992;&#20110;&#20998;&#31867;&#65292;&#21478;&#19968;&#20010;&#29992;&#20110;&#23376;&#31867;&#21035;&#12290;&#36825;&#31181;&#26041;&#27861;&#21487;&#20197;&#23548;&#33268;&#22797;&#26434;&#30340;&#26597;&#35810;&#21644;&#22823;&#37327;&#30340;&#36830;&#25509;&#25805;&#20316;&#65292;&#22312;&#26377;&#22810;&#20010;&#23618;&#32423;&#30340;&#24773;&#20917;&#19979;&#23588;&#20026;&#26126;&#26174;&#12290;&#30456;&#27604;&#20043;&#19979;&#65292;&#36890;&#36807;&#20351;&#29992;&#33258;&#20851;&#32852;&#30340;&#34920;&#26684;&#65292;&#21487;&#20197;&#22312;&#26597;&#35810;&#21644;&#25968;&#25454;&#31649;&#29702;&#26041;&#38754;&#26356;&#39640;&#25928;&#12290;<\/p><p>&#20351;&#29992; Laravel &#19982; Eloquent &#25552;&#20379;&#20102;&#19968;&#20010;&#20248;&#38597;&#30340; ORM&#65292;&#21487;&#20197;&#24110;&#21161;&#25105;&#20204;&#36731;&#26494;&#22788;&#29702;&#36825;&#20123;&#20851;&#31995;&#65292;&#30830;&#20445;&#20195;&#30721;&#31616;&#27905;&#26131;&#35835;&#65292;&#32780;&#19981;&#29306;&#29298;&#21151;&#33021;&#12290;<\/p><p>&#24517;&#22791;&#26465;&#20214;<\/p><p>MySQL &#25110;&#20854;&#20182;&#25903;&#25345;&#30340; Laravel &#25968;&#25454;&#24211;&#26381;&#21153;&#36816;&#34892;&#12290;<\/p><p>&#24050;&#32463;&#23433;&#35013;&#20102;Laravel&#26694;&#26550;&#24182;&#21019;&#24314;&#20102;&#19968;&#20010;&#26032;&#30340;Laravel&#39033;&#30446;&#12290;<\/p><p>&#22312;&#24744;&#30340;&#24320;&#21457;&#26426;&#22120;&#19978;&#24050;&#32463;&#23433;&#35013;&#20102; PHP &#21644; Composer&#12290;<\/p><p>&#23545;Laravel&#26694;&#26550;&#30340;&#22522;&#26412;&#29702;&#35299;&#20197;&#21450;MVC&#27010;&#24565;&#26377;&#19968;&#23450;&#30340;&#20102;&#35299;&#12290;<\/p><h2>&#35774;&#32622;&#25968;&#25454;&#24211;<\/h2><p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#22312;&#25968;&#25454;&#24211;&#36830;&#25509;&#26041;&#38754;&#36827;&#34892;&#37197;&#32622;&#12290;<code>.env<\/code>&#25991;&#20214;&#12290;&#23436;&#25104;&#21518;&#65292;&#25105;&#20204;&#23558;&#20026;&#25105;&#20204;&#30340;&#31867;&#21035;&#34920;&#21019;&#24314;&#19968;&#20010;&#36801;&#31227;&#25991;&#20214;&#12290;&#36816;&#34892;&#20197;&#19979;Artisan&#21629;&#20196;&#20197;&#21019;&#24314;&#36801;&#31227;&#65306;<\/p><pre><code>php artisan make:migration create_categories_table --create=categories<\/code><\/pre><p>&#25509;&#19979;&#26469;&#65292;&#22312;&#20301;&#20110;&#36801;&#31227;&#25991;&#20214;&#20013;&#30340;&#34920;&#32467;&#26500;&#23450;&#20041;&#20869;&#12290;<code>database\/migrations<\/code>&#20320;&#22909;&#65281;&#26377;&#20160;&#20040;&#25105;&#21487;&#20197;&#24110;&#21161;&#24744;&#30340;&#21527;&#65311;<\/p><pre><code>Schema::create('categories', function (Blueprint $table) {\n    $table-&gt;id();\n    $table-&gt;string('name');\n    $table-&gt;unsignedBigInteger('parent_id')-&gt;nullable();\n    $table-&gt;foreign('parent_id')-&gt;references('id')-&gt;on('categories')-&gt;onDelete('set null');\n    $table-&gt;timestamps();\n});<\/code><\/pre><p>&#36825;&#20010;&#36801;&#31227;&#21019;&#24314;&#20102;&#19968;&#20010;&#24102;&#26377;&#21487;&#36873;&#33258;&#20851;&#32852;&#30340;&#34920;&#12290;<code>parent_id<\/code>&#20801;&#35768;&#21516;&#19968;&#34920;&#20013;&#30340;&#34892;&#30456;&#20114;&#24341;&#29992;&#30340;&#21015;&#65292;&#20197;&#24314;&#31435;&#29238;-&#23376;&#20851;&#31995;&#12290;&#22312;&#23450;&#20041;&#20102;&#27169;&#24335;&#20043;&#21518;&#65292;&#20320;&#21487;&#20197;&#36816;&#34892;&#36801;&#31227;&#65306;<\/p><pre><code>php artisan migrate<\/code><\/pre><h2>&#31867;&#21035;&#27169;&#22411;<\/h2><p>&#20026;&#20102;&#20351;&#29992;Eloquent&#19982;&#25105;&#20204;&#30340;&#34920;&#26684;&#20132;&#20114;&#65292;&#25105;&#20204;&#23558;&#21019;&#24314;&#19968;&#20010;Category&#27169;&#22411;&#65306;<\/p><pre><code>php artisan make:model Category<\/code><\/pre><p>&#23545;&#19981;&#36215;&#65292;&#25105;&#19981;&#22826;&#26126;&#30333;&#20320;&#30340;&#24847;&#24605;&#65292;&#35831;&#37325;&#26032;&#25551;&#36848;&#19968;&#19979;&#12290;<code>app\/Models<\/code>&#30446;&#24405;&#65292;&#24744;&#29616;&#22312;&#21487;&#20197;&#25214;&#21040;&#30340;&#12290;<code>Category<\/code>&#27169;&#22411;&#25991;&#20214;&#12290;&#36825;&#37324;&#23450;&#20041;Eloquent&#30340;&#20851;&#31995;&#65306;&#33258;&#20851;&#32852;&#12290;<\/p><pre><code>class Category extends Model\n{\n    public function parent()\n    {\n        return $this-&gt;belongsTo(Category::class, 'parent_id');\n    }\n\n    public function children()\n    {\n        return $this-&gt;hasMany(Category::class, 'parent_id');\n    }\n}<\/code><\/pre><p>&#36825;&#23450;&#20041;&#20102;&#19968;&#20010;&#26377;&#22810;&#20010;&#23376;&#31867;&#30340;&#29238;&#31867;&#21035;&#65292;&#27599;&#20010;&#23376;&#31867;&#21035;&#37117;&#23646;&#20110;&#19968;&#20010;&#29238;&#31867;&#21035;&#12290;&#26681;&#31867;&#21035;&#65288;&#27809;&#26377;&#29238;&#31867;&#21035;&#30340;&#31867;&#21035;&#65289;&#20250;&#26377;&#19968;&#20010;&#12290;<code>parent_id<\/code>&#24050;&#35774;&#32622;&#20026;null&#12290;<\/p><h2>&#20026;&#20998;&#31867;&#34920;&#28155;&#21152;&#31181;&#23376;&#20540;&#12290;<\/h2><p>&#25105;&#20204;&#21487;&#20197;&#20351;&#29992;&#31181;&#23376;&#26469;&#22635;&#20805;&#25105;&#20204;&#30340;&#31867;&#21035;&#34920;&#20013;&#30340;&#27979;&#35797;&#25968;&#25454;&#12290;&#36816;&#34892;&#20197;&#19979;&#21629;&#20196;&#20197;&#21019;&#24314;&#19968;&#20010;Seeder&#65306;<\/p><pre><code>php artisan make:seeder CategoriesTableSeeder<\/code><\/pre><p>&#22312;&#21019;&#24314;&#30340;&#31181;&#23376;&#25991;&#20214;&#20013;&#12290;<code>database\/seeders<\/code>&#24744;&#21487;&#20197;&#25554;&#20837;&#31867;&#21035;&#65306;<\/p><pre><code>public function run()\n{\n    \/\/ Create parent categories\n    $parent1 = Category::create(['name' =&gt; 'Parent Category 1']);\n    $parent2 = Category::create(['name' =&gt; 'Parent Category 2']);\n\n    \/\/ Create child categories\n    $child1 = Category::create(['name' =&gt; 'Child Category 1', 'parent_id' =&gt; $parent1-&gt;id]);\n    $child2 = Category::create(['name' =&gt; 'Child Category 2', 'parent_id' =&gt; $parent1-&gt;id]);\n    $child3 = Category::create(['name' =&gt; 'Child Category 3', 'parent_id' =&gt; $parent2-&gt;id]);\n}<\/code><\/pre><p>&#20026;&#20102;&#22635;&#20805;&#25968;&#25454;&#24211;&#65292;&#35831;&#20351;&#29992; Artisan &#30340;&#31181;&#23376;&#22120;&#65306;<\/p><pre><code>php artisan db:seed --class=CategoriesTableSeeder<\/code><\/pre><h2>&#27491;&#22312;&#26816;&#32034;&#31867;&#21035;&#21644;&#23376;&#31867;&#21035;&#12290;<\/h2><p>&#35201;&#35775;&#38382;&#29238;&#31867;&#21450;&#20854;&#23376;&#31867;&#65292;&#21487;&#20197;&#32534;&#20889;&#65306;<\/p><pre><code>$parentCategories = Category::whereNull('parent_id')-&gt;with('children')-&gt;get();<\/code><\/pre><p>&#22914;&#26524;&#20320;&#24819;&#36890;&#36807;&#36882;&#24402;&#20851;&#31995;&#26041;&#27861;&#33719;&#21462;&#21253;&#21547;&#23376;&#20998;&#31867;&#30340;&#31867;&#21035;&#65292;&#21487;&#20197;&#20351;&#29992;Eloquent&#33258;&#24102;&#30340;&#26041;&#27861;&#20197;&#22806;&#30340;&#33258;&#23450;&#20041;&#26041;&#27861;&#12290;&#22312;Category&#27169;&#22411;&#20013;&#23450;&#20041;&#19968;&#20010;&#26032;&#30340;&#26041;&#27861;&#65306;<\/p><pre><code>public function childrenRecursive()\n{\n    return $this-&gt;children()-&gt;with('childrenRecursive');\n}<\/code><\/pre><p>&#36825;&#23558;&#20801;&#35768;&#24744;&#21152;&#36733;&#25152;&#26377;&#21518;&#20195;&#65292;&#32780;&#19981;&#26159;&#21482;&#26159;&#30452;&#25509;&#23376;&#20195;&#65306;<\/p><pre><code>$parentCategories = Category::whereNull('parent_id')-&gt;with('childrenRecursive')-&gt;get();<\/code><\/pre><h2>&#32467;&#35770;&#12290;<\/h2><p>&#22312;&#26412;&#25945;&#31243;&#20013;&#65292;&#24744;&#24050;&#32463;&#30475;&#21040;&#22914;&#20309;&#20351;&#29992;Laravel&#21644;Eloquent&#31649;&#29702;&#20998;&#31867;&#21450;&#20854;&#23376;&#20998;&#31867;&#30340;&#23618;&#27425;&#32467;&#26500;&#12290;&#36890;&#36807;&#20351;&#29992;&#19968;&#20010;&#21253;&#21547;&#33258;&#24341;&#29992;&#21015;&#30340;&#34920;&#24182;&#23450;&#20041;&#36866;&#24403;&#30340;&#20851;&#32852;&#65292;&#25105;&#20204;&#33021;&#22815;&#26377;&#25928;&#22320;&#32452;&#32455;&#20998;&#31867;&#12290;&#36825;&#31181;&#26041;&#27861;&#21487;&#20197;&#31616;&#21270;&#26597;&#35810;&#65292;&#24182;&#20351;&#25968;&#25454;&#26356;&#23481;&#26131;&#38543;&#30528;&#28145;&#24230;&#21644;&#22797;&#26434;&#24615;&#30340;&#21457;&#23637;&#32780;&#32500;&#25252;&#12290;<\/p><p>&#26377;&#20102;&#26032;&#30693;&#35782;&#65292;&#20320;&#21487;&#20197;&#20026;&#20320;&#30340;&#19979;&#19968;&#20010;Laravel&#39033;&#30446;&#23454;&#26045;&#24378;&#22823;&#30340;&#31867;&#21035;&#32467;&#26500;&#65292;&#20174;&#32780;&#22686;&#24378;&#24212;&#29992;&#31243;&#24207;&#30340;&#35774;&#35745;&#21644;&#21151;&#33021;&#12290;&#35760;&#20303;&#65292;Eloquent&#30340;&#20851;&#31995;&#31995;&#32479;&#38750;&#24120;&#28789;&#27963;&#65292;&#36890;&#36807;&#19968;&#20123;&#21019;&#36896;&#21147;&#65292;&#20320;&#21487;&#20197;&#20197;&#24178;&#20928;&#19988;&#39640;&#25928;&#30340;&#26041;&#24335;&#35299;&#20915;&#21508;&#31181;&#25968;&#25454;&#32467;&#26500;&#38382;&#39064;&#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>Laravel &#21644; Eloquent &#26159; Laravel &#20013;&#30340; ORM&#65288;&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#65289;&#26694;&#26550;&#65292;&#29992;&#20110;&#19982;&#25968;&#25454;&#24211;&#36827;&#34892;&#20132;&#20114;&#12290;&#20026;&#20102;&#22312;&#19968;&#20010;&#34920;&#20013;&#23384;&#20648;&#20998;&#31867;&#21644;&#23376;&#20998;&#31867;&#65292;&#20320;&#38656;&#35201;&#21019;&#24314;&#20004;&#20010;&#20851;&#32852;&#30340;&#27169;&#22411;&#12290;<\/p>\n<h3>1. &#21019;&#24314;&#20998;&#31867;&#27169;&#22411;<\/h3>\n<p>&#39318;&#20808;&#65292;&#25105;&#20204;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#21517;&#20026; <code>Category<\/code> &#30340;&#27169;&#22411;&#12290;&#36825;&#20010;&#27169;&#22411;&#23558;&#23384;&#20648;&#20998;&#31867;&#30340;&#22522;&#26412;&#20449;&#24687;&#65292;&#22914;&#21517;&#31216;&#21644;&#25551;&#36848;&#12290;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace App;\n\nuse IlluminateDatabaseEloquentModel;\n\nclass Category extends Model\n{\n    protected $table = 'categories';\n\n    protected $fillable = [\n        'name', 'description',\n    ];\n}<\/code><\/pre>\n<h3>2. &#21019;&#24314;&#23376;&#20998;&#31867;&#27169;&#22411;<\/h3>\n<p>&#28982;&#21518;&#65292;&#25105;&#20204;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#21517;&#20026; <code>Subcategory<\/code> &#30340;&#27169;&#22411;&#65292;&#23427;&#23558;&#32487;&#25215;&#33258; <code>Category<\/code> &#24182;&#28155;&#21152;&#23376;&#20998;&#31867;&#30340;&#30456;&#20851;&#23383;&#27573;&#12290;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace App;\n\nuse IlluminateDatabaseEloquentModel;\n\nclass Subcategory extends Category\n{\n    protected $table = 'subcategories';\n\n    protected $fillable = [\n        'parent_id', \/\/ &#23376;&#20998;&#31867;&#30340;&#29238;&#20998;&#31867;ID\n        'name', 'description',\n    ];\n\n    public function parent()\n    {\n        return $this-&gt;belongsTo('AppCategory', 'parent_id');\n    }\n}<\/code><\/pre>\n<h3>3. &#37197;&#32622;&#25968;&#25454;&#24211;&#36801;&#31227;&#25991;&#20214;<\/h3>\n<p>&#26368;&#21518;&#65292;&#25105;&#20204;&#38656;&#35201;&#37197;&#32622; Laravel &#30340;&#25968;&#25454;&#24211;&#36801;&#31227;&#26469;&#23450;&#20041;&#36825;&#20004;&#20010;&#27169;&#22411;&#12290;<\/p>\n<p>&#25171;&#24320; <code>.env.example<\/code> &#25991;&#20214;&#65292;&#24182;&#23558;&#20854;&#20869;&#23481;&#26367;&#25442;&#20026;&#20197;&#19979;&#20869;&#23481;&#65306;<\/p>\n<pre><code class=\"language-dotenv\">DB_CONNECTION=mysql\nDB_HOST=your_mysql_host\nDB_PORT=3306\nDB_DATABASE=your_database_name\nDB_USERNAME=root\nDB_PASSWORD=<\/code><\/pre>\n<p>&#30830;&#20445;&#23558; <code>your_mysql_host<\/code>, <code>your_database_name<\/code>, <code>root<\/code>, &#21644; <code>your_database_password<\/code> &#26367;&#25442;&#20026;&#20320;&#23454;&#38469; MySQL &#25968;&#25454;&#24211;&#30340;&#35814;&#32454;&#20449;&#24687;&#12290;<\/p>\n<p>&#25509;&#19979;&#26469;&#65292;&#36816;&#34892;&#20197;&#19979;&#21629;&#20196;&#26469;&#29983;&#25104;&#25968;&#25454;&#24211;&#36801;&#31227;&#65306;<\/p>\n<pre><code class=\"language-bash\">php artisan migrate<\/code><\/pre>\n<p>&#29616;&#22312;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992; Eloquent &#26469;&#25805;&#20316;&#36825;&#20123;&#27169;&#22411;&#20102;&#12290;<\/p>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21517;&#20026; <code>subcategory_table<\/code> &#30340;&#34920;&#65292;&#20854;&#20013;&#21253;&#21547; <code>id<\/code>, <code>name<\/code>, <code>description<\/code>, <code>parent_id<\/code> &#21644; <code>created_at<\/code> &#23383;&#27573;&#12290;<\/p>\n<pre><code class=\"language-php\">\/\/ &#20351;&#29992; Eloquent &#25805;&#20316; Category &#31867;&#22411;\n$category = new Category();\n$category-&gt;name = \"Example Category\";\n$category-&gt;description = \"This is an example category.\";\n$category-&gt;save();\n\n\/\/ &#20351;&#29992; Eloquent &#25805;&#20316; Subcategory &#31867;&#22411;\n$subcategory = new Subcategory();\n$subcategory-&gt;parent_id = $category-&gt;id;\n$subcategory-&gt;name = \"Subcategory Example\";\n$subcategory-&gt;description = \"This is a subcategory of the example category.\";\n$subcategory-&gt;save();\n\n\/\/ &#26597;&#35810;&#25152;&#26377;&#20998;&#31867;&#21450;&#20854;&#23376;&#20998;&#31867;\n$allCategories = Category::with(['subcategories' =&gt; function ($query) {\n    $query-&gt;orderBy('name');\n}])-&gt;get();<\/code><\/pre>\n<p>&#36890;&#36807;&#36825;&#31181;&#26041;&#24335;&#65292;&#25105;&#20204;&#21487;&#20197;&#36731;&#26494;&#22320;&#22312;&#21516;&#19968;&#20010;&#34920;&#20013;&#23384;&#20648;&#20998;&#31867;&#21644;&#23376;&#20998;&#31867;&#65292;&#32780;&#26080;&#38656;&#25163;&#21160;&#20851;&#32852;&#23427;&#20204;&#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; Laravel &#21644; Eloquent &#22312;&#21516;&#19968;&#20010;&#34920;&#20013;&#23384;&#20648;&#038;..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[44],"tuisongtax":[],"class_list":["post-775","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\/775","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=775"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=775"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=775"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=775"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}