{"id":952,"date":"2025-06-12T03:27:31","date_gmt":"2025-06-11T19:27:31","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/laravel\/952.html"},"modified":"2025-06-12T03:27:31","modified_gmt":"2025-06-11T19:27:31","slug":"eloquent%e4%b8%ad%e7%9a%84%e6%a8%a1%e5%9e%8b%e4%ba%8b%e4%bb%b6%ef%bc%9a%e5%85%a8%e9%9d%a2%e6%8c%87%e5%8d%97","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/952.html","title":{"rendered":"Eloquent\u4e2d\u7684\u6a21\u578b\u4e8b\u4ef6\uff1a\u5168\u9762\u6307\u5357"},"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;Eloquent&#20013;&#30340;&#27169;&#22411;&#20107;&#20214;&#65306;&#20840;&#38754;&#25351;&#21335;<\/p>\n<p>&#22312;&#20351;&#29992;Laravel&#26694;&#26550;&#24320;&#21457;Web&#24212;&#29992;&#26102;&#65292;Eloquent ORM&#26159;&#22788;&#29702;&#25968;&#25454;&#24211;&#20132;&#20114;&#30340;&#26680;&#24515;&#24037;&#20855;&#20043;&#19968;&#12290;&#23427;&#25552;&#20379;&#20102;&#24378;&#22823;&#30340;&#21151;&#33021;&#26469;&#31616;&#21270;&#25968;&#25454;&#25805;&#20316;&#65292;&#24182;&#19988;&#25903;&#25345;&#33258;&#23450;&#20041;&#27169;&#22411;&#20107;&#20214;&#12290;&#26412;&#25991;&#23558;&#35814;&#32454;&#20171;&#32461;Eloquent&#27169;&#22411;&#20107;&#20214;&#30340;&#31181;&#31867;&#12289;&#22914;&#20309;&#35302;&#21457;&#36825;&#20123;&#20107;&#20214;&#20197;&#21450;&#22914;&#20309;&#32534;&#20889;&#33258;&#23450;&#20041;&#20107;&#20214;&#22788;&#29702;&#31243;&#24207;&#12290;<\/p>\n<h3>1. &#27169;&#22411;&#20107;&#20214;&#27010;&#36848;<\/h3>\n<p>Eloquent&#27169;&#22411;&#20107;&#20214;&#21253;&#25324;&#20197;&#19979;&#20960;&#31181;&#65306;<\/p>\n<ul>\n<li><strong><code>creating<\/code><\/strong>: &#22312;&#21019;&#24314;&#26032;&#35760;&#24405;&#20043;&#21069;&#35302;&#21457;&#12290;<\/li>\n<li><strong><code>created<\/code><\/strong>: &#21019;&#24314;&#26032;&#35760;&#24405;&#21518;&#35302;&#21457;&#12290;<\/li>\n<li><strong><code>updating<\/code><\/strong>: &#26356;&#26032;&#29616;&#26377;&#35760;&#24405;&#20043;&#21069;&#35302;&#21457;&#12290;<\/li>\n<li><strong><code>updated<\/code><\/strong>: &#26356;&#26032;&#29616;&#26377;&#35760;&#24405;&#21518;&#35302;&#21457;&#12290;<\/li>\n<li><strong><code>deleting<\/code><\/strong>: &#21024;&#38500;&#29616;&#26377;&#35760;&#24405;&#20043;&#21069;&#35302;&#21457;&#12290;<\/li>\n<li><strong><code>deleted<\/code><\/strong>: &#21024;&#38500;&#29616;&#26377;&#35760;&#24405;&#21518;&#35302;&#21457;&#12290;<\/li>\n<li><strong><code>restoring<\/code><\/strong>: &#24674;&#22797;&#24050;&#21024;&#38500;&#30340;&#35760;&#24405;&#20043;&#21069;&#35302;&#21457;&#12290;<\/li>\n<li><strong><code>restored<\/code><\/strong>: &#24674;&#22797;&#24050;&#21024;&#38500;&#30340;&#35760;&#24405;&#21518;&#35302;&#21457;&#12290;<\/li>\n<li><strong><code>saving<\/code><\/strong>: &#22312;&#20445;&#23384;&#27169;&#22411;&#23454;&#20363;&#20043;&#21069;&#35302;&#21457;&#65288;&#21363;&#22312;<code>create<\/code>&#21644;<code>update<\/code>&#26041;&#27861;&#20043;&#38388;&#65289;&#12290;<\/li>\n<li><strong><code>saved<\/code><\/strong>: &#22312;&#20445;&#23384;&#27169;&#22411;&#23454;&#20363;&#20043;&#21518;&#35302;&#21457;&#65288;&#21363;&#22312;<code>create<\/code>&#21644;<code>update<\/code>&#26041;&#27861;&#20043;&#38388;&#65289;&#12290;<\/li>\n<\/ul>\n<h3>2. &#35302;&#21457;&#27169;&#22411;&#20107;&#20214;<\/h3>\n<p>&#20320;&#21487;&#20197;&#36890;&#36807;&#30452;&#25509;&#35843;&#29992;&#27169;&#22411;&#30340;&#26041;&#27861;&#25110;&#20351;&#29992;&#20107;&#20214;&#30417;&#21548;&#22120;&#26469;&#35302;&#21457;&#36825;&#20123;&#20107;&#20214;&#12290;&#20197;&#19979;&#26159;&#19968;&#20123;&#24120;&#35265;&#30340;&#35302;&#21457;&#26041;&#24335;&#65306;<\/p>\n<h4>&#30452;&#25509;&#35843;&#29992;&#26041;&#27861;<\/h4>\n<pre><code class=\"language-php\">$article = new AppModelsArticle();\n$article-&gt;title = 'New Article';\n$article-&gt;content = 'This is the content of the new article.';\n$article-&gt;save();\n\n\/\/ &#30417;&#21548;&#21019;&#24314;&#20107;&#20214;\n$article-&gt;dispatchEvent('eloquent.create');<\/code><\/pre>\n<h4>&#20351;&#29992;&#20107;&#20214;&#30417;&#21548;&#22120;<\/h4>\n<p>&#20320;&#21487;&#20197;&#22312;&#26381;&#21153;&#25552;&#20379;&#32773;&#20013;&#27880;&#20876;&#20107;&#20214;&#30417;&#21548;&#22120;&#65292;&#20197;&#20415;&#22312;&#29305;&#23450;&#20107;&#20214;&#21457;&#29983;&#26102;&#25191;&#34892;&#19968;&#20123;&#33258;&#23450;&#20041;&#36923;&#36753;&#12290;<\/p>\n<pre><code class=\"language-php\">use IlluminateSupportFacadesEvent;\n\nclass EventServiceProvider extends ServiceProvider\n{\n    public function boot()\n    {\n        Event::listen('eloquent.created', function ($model) {\n            \/\/ &#33258;&#23450;&#20041;&#36923;&#36753;\n            dd($model);\n        });\n    }\n}<\/code><\/pre>\n<h3>3. &#32534;&#20889;&#33258;&#23450;&#20041;&#20107;&#20214;&#22788;&#29702;&#31243;&#24207;<\/h3>\n<p>&#20320;&#21487;&#20197;&#26681;&#25454;&#38656;&#35201;&#32534;&#20889;&#33258;&#23450;&#20041;&#20107;&#20214;&#22788;&#29702;&#31243;&#24207;&#26469;&#22788;&#29702;&#19981;&#21516;&#30340;&#27169;&#22411;&#20107;&#20214;&#12290;&#20197;&#19979;&#26159;&#19968;&#20010;&#31616;&#21333;&#30340;&#31034;&#20363;&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppEvents;\n\nuse IlluminateFoundationEventsDispatchable;\nuse IlluminateQueueSerializesModels;\n\nclass ArticleCreated extends Dispatchable\n{\n    use SerializesModels;\n\n    public $article;\n\n    public function __construct(AppModelsArticle $article)\n    {\n        $this-&gt;article = $article;\n    }\n\n    public function handle()\n    {\n        \/\/ &#33258;&#23450;&#20041;&#36923;&#36753;\n        dd('Article created: ' . $this-&gt;article-&gt;title);\n    }\n}\n\n\/\/ &#22312;&#25511;&#21046;&#22120;&#20013;&#35302;&#21457;&#20107;&#20214;\npublic function store(Request $request)\n{\n    $article = new AppModelsArticle();\n    $article-&gt;title = $request-&gt;input('title');\n    $article-&gt;content = $request-&gt;input('content');\n    $article-&gt;save();\n\n    event(new ArticleCreated($article));\n\n    return redirect()-&gt;route('articles.index');\n}<\/code><\/pre>\n<h3>&#24635;&#32467;<\/h3>\n<p>Eloquent&#27169;&#22411;&#20107;&#20214;&#26159;Laravel&#26694;&#26550;&#20013;&#38750;&#24120;&#24378;&#22823;&#30340;&#19968;&#37096;&#20998;&#65292;&#21487;&#20197;&#24110;&#21161;&#20320;&#22312;&#24212;&#29992;&#31243;&#24207;&#30340;&#19981;&#21516;&#38454;&#27573;&#25191;&#34892;&#33258;&#23450;&#20041;&#36923;&#36753;&#12290;&#36890;&#36807;&#30452;&#25509;&#35843;&#29992;&#26041;&#27861;&#25110;&#20351;&#29992;&#20107;&#20214;&#30417;&#21548;&#22120;&#65292;&#20320;&#21487;&#20197;&#36731;&#26494;&#22320;&#35302;&#21457;&#24182;&#22788;&#29702;&#21508;&#31181;&#27169;&#22411;&#20107;&#20214;&#12290;&#24076;&#26395;&#36825;&#31687;&#25991;&#31456;&#33021;&#24110;&#21161;&#20320;&#26356;&#22909;&#22320;&#29702;&#35299;&#21644;&#21033;&#29992;Eloquent&#27169;&#22411;&#20107;&#20214;&#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;ORM&#65288;&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#65289;&#25552;&#20379;&#20102;&#20351;&#29992;&#25968;&#25454;&#24211;&#30340;&#24378;&#22823;&#19988;&#20248;&#38597;&#30340;&#26041;&#24335;&#12290;&#28982;&#32780;&#65292;&#23427;&#30340;&#21151;&#33021;&#19981;&#20165;&#38480;&#20110;&#21019;&#24314;&#12289;&#26816;&#32034;&#12289;&#26356;&#26032;&#21644;&#21024;&#38500;&#35760;&#24405;&#65307;&#23427;&#36824;&#21253;&#21547;&#19968;&#20010;&#21517;&#20026;&#27169;&#22411;&#20107;&#20214;&#30340;&#29305;&#24615;&#65292;&#20801;&#35768;&#24744;&#22312;&#27169;&#22411;&#29983;&#21629;&#21608;&#26399;&#20013;&#30340;&#21508;&#31181;&#28857;&#19978;&#36827;&#34892;&#38057;&#20837;&#25805;&#20316;&#12290;&#22312;&#36825;&#31687;&#20840;&#38754;&#25351;&#21335;&#20013;&#65292;&#25105;&#20204;&#23558;&#28145;&#20837;&#25506;&#35752;Laravel&#30340;&#27169;&#22411;&#20107;&#20214;&#19990;&#30028;&#65292;&#20026;&#24744;&#25552;&#20379;&#20102;&#35299;&#20915;&#27492;&#21151;&#33021;&#20197;&#23454;&#29616;&#20854;&#20840;&#37096;&#28508;&#21147;&#25152;&#38656;&#30340;&#29702;&#35299;&#12290;<\/p><h2>&#29702;&#35299;&#27169;&#22411;&#20107;&#20214;<\/h2><p>&#27169;&#22411;&#20107;&#20214;&#22312;&#27169;&#22411;&#23454;&#20363;&#30340;&#29983;&#21629;&#21608;&#26399;&#20013;&#30340;&#29305;&#23450;&#26102;&#21051;&#35302;&#21457;&#12290;&#36825;&#20123;&#20107;&#20214;&#21253;&#25324;&#22914;&lsquo;&#21019;&#24314;&rsquo;&#12289;&lsquo;&#21019;&#24314;&#23436;&#25104;&rsquo;&#12289;&lsquo;&#26356;&#26032;&rsquo;&#12289;&lsquo;&#26356;&#26032;&#23436;&#25104;&rsquo;&#12289;&lsquo;&#20445;&#23384;&rsquo;&#12289;&lsquo;&#20445;&#23384;&#23436;&#25104;&rsquo;&#12289;&lsquo;&#21024;&#38500;&rsquo;&#12289;&lsquo;&#21024;&#38500;&#23436;&#25104;&rsquo;&#12289;&lsquo;&#24674;&#22797;&rsquo;&#21644;&lsquo;&#24674;&#22797;&#23436;&#25104;&rsquo;&#31561;&#12290;&#20320;&#21487;&#20197;&#20026;&#36825;&#20123;&#20107;&#20214;&#35774;&#32622;&#30417;&#21548;&#22120;&#65292;&#20197;&#20415;&#22312;&#20219;&#20309;&#19968;&#28857;&#25191;&#34892;&#20195;&#30721;&#12290;<\/p><p>&#20363;&#22914;&#65292;&#24403;&#24086;&#23376;&#26356;&#26032;&#26102;&#28165;&#38500;&#32531;&#23384;&#12290;&#20320;&#21487;&#20197;&#36890;&#36807;&#38057;&#20837;&#24744;&#30340;&#24086;&#23376;&#27169;&#22411;&#30340;&ldquo;&#26356;&#26032;&rdquo;&#20107;&#20214;&#26469;&#23454;&#29616;&#36825;&#19968;&#28857;&#12290;<\/p><pre><code>use AppModelsPost; \/\/ Make sure to include the appropriate namespace\nuse IlluminateSupportFacadesCache;\n\nPost::updated(function ($post) {\n    Cache::forget(\"posts_cache\");\n});\n<\/code><\/pre><h2>&#27880;&#20876;&#20107;&#20214;&#30417;&#21548;&#22120;<\/h2><p>&#20026;&#20102;&#30417;&#21548;&#27169;&#22411;&#20107;&#20214;&#65292;&#24744;&#21487;&#20197;&#36873;&#25321;&#22312;&#24744;&#30340;&#27169;&#22411;&#20869;&#37096;&#23450;&#20041;&#23427;&#20204;&#65292;&#25110;&#32773;&#36890;&#36807;&#20107;&#20214;&#26381;&#21153;&#25552;&#20379;&#32773;&#26469;&#23454;&#29616;&#12290;&#22312;&#24744;&#30340;&#27169;&#22411;&#20869;&#37096;&#65292;&#24744;&#21487;&#20197;&#36890;&#36807;boot&#26041;&#27861;&#26469;&#38468;&#21152;&#24744;&#30340;&#20107;&#20214;&#20390;&#21548;&#22120;&#12290;<\/p><pre><code>use IlluminateDatabaseEloquentModel;\nuse IlluminateSupportFacadesLog;\n\nclass Post extends Model\n{\n    protected static function boot()\n    {\n        parent::boot();\n\n        static::created(function ($post) {\n            Log::info('Post created: ' . $post-&gt;title);\n        });\n    }\n}\n<\/code><\/pre><p>&#20363;&#22914;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;&#20107;&#20214;&#26381;&#21153;&#25552;&#20379;&#32773;&#26469;&#28165;&#29702;&#27169;&#22411;&#20195;&#30721;&#12290;&#36825;&#26159;&#23450;&#20041;&#27169;&#22411;&#20107;&#20214;&#30417;&#21548;&#22120;&#30340;&#22320;&#26041;&#12290;<\/p><pre><code>use IlluminateFoundationSupportProvidersEventServiceProvider as ServiceProvider;\n\nclass EventServiceProvider extends ServiceProvider\n{\n    protected $listen = [\n        'AppEventsSomeEvent' =&gt; [\n            'AppListenersSomeListener',\n        ],\n        'eloquent.created:AppPost' =&gt; [\n            'AppListenersEmailPostCreatedNotification',\n        ],\n    ];\n}\n<\/code><\/pre><h2>&#20107;&#20214;&#35266;&#23519;&#32773;<\/h2><p>&#23545;&#20110;&#21916;&#27426;&#20445;&#25345;&#27169;&#22411;&#36731;&#37327;&#19988;&#19987;&#27880;&#30340;&#29992;&#25143;&#65292;Eloquent &#25552;&#20379;&#20102;&#35266;&#23519;&#32773;&#65288;observer&#65289;&#21151;&#33021;&#12290;&#19968;&#20010;&#35266;&#23519;&#32773;&#31867;&#21487;&#20197;&#25345;&#26377;&#38024;&#23545;&#22810;&#31181;&#20107;&#20214;&#31867;&#22411;&#30340;&#30417;&#21548;&#22120;&#26041;&#27861;&#12290;&#20197;&#19979;&#26159;&#19968;&#20010;&#25105;&#20204; Post &#27169;&#22411;&#30340;&#35266;&#23519;&#32773;&#31867;&#31034;&#20363;&#12290;<\/p><pre><code>use IlluminateSupportFacadesLog;\nuse IlluminateSupportFacadesCache;\n\nclass PostObserver\n{\n    public function created(Post $post)\n    {\n        \/\/ Handle the \"created\" event.\n        Log::info('Post created: ' . $post-&gt;title);\n    }\n\n    public function updated(Post $post)\n    {\n        \/\/ Handle the \"updated\" event.\n        Cache::forget(\"posts_cache\");\n    }\n}\n<\/code><\/pre><p>&#22312;&#23450;&#20041;&#20102;&#35266;&#23519;&#32773;&#20043;&#21518;&#65292;&#20320;&#38656;&#35201;&#23558;&#20854;&#27880;&#20876;&#21040;&#26381;&#21153;&#25552;&#20379;&#32773;&#30340;boot&#26041;&#27861;&#20013;&#65292;&#26368;&#22909;&#26159;&#22312;EventServiceProvider&#20013;&#12290;<\/p><pre><code>public function boot()\n{\n    Post::observe(PostObserver::class);\n}\n<\/code><\/pre><h2>&#21462;&#28040;&#27963;&#21160;<\/h2><p>&#26377;&#26102;&#65292;&#24744;&#21487;&#33021;&#24076;&#26395;&#22312;&#20107;&#20214;&#25805;&#20316;&#65288;&#22914;&#38459;&#27490;&#27169;&#22411;&#20445;&#23384;&#25110;&#21024;&#38500;&#65289;&#26102;&#20013;&#26029;&#35813;&#25805;&#20316;&#12290;&#20026;&#27492;&#65292;&#24744;&#21487;&#20197;&#20174;&#24744;&#30340;&#20107;&#20214;&#30417;&#21548;&#22120;&#20013;&#36820;&#22238; false&#12290;<\/p><pre><code>Post::deleting(function ($post) {\n    if ($post-&gt;is_locked) {\n        return false;\n    }\n});\n<\/code><\/pre><h2>&#20351;&#29992;&#27169;&#22411;&#35843;&#24230;&#26041;&#27861;<\/h2><p>Laravel 5.5 &#24341;&#20837;&#20102;&#27169;&#22411;&#20107;&#20214;&#30340;&#24191;&#25773;&#26041;&#27861;&#65292;&#36825;&#31616;&#21270;&#20102;&#25163;&#21160;&#35302;&#21457;&#33258;&#23450;&#20041;&#20107;&#20214;&#30340;&#36807;&#31243;&#12290;&#24403;&#20320;&#38656;&#35201;&#25163;&#21160;&#35302;&#21457;&#20107;&#20214;&#26102;&#65292;&#21487;&#20197;&#30452;&#25509;&#22312;&#27169;&#22411;&#23454;&#20363;&#19978;&#35843;&#29992;&#36825;&#20123;&#26041;&#27861;&#12290;<\/p><pre><code>$post-&gt;dispatchesEvents = [\n    'saving' =&gt; PostSaving::class,\n    'saved'  =&gt; PostSaved::class,\n];\n\n$post-&gt;save();\n<\/code><\/pre><h2>&#33258;&#23450;&#20041;&#20107;&#20214;<\/h2><p>&#20320;&#19981;&#38656;&#35201;&#23616;&#38480;&#20110;&#40664;&#35748;&#30340;Eloquent&#20107;&#20214;&#12290;Eloquent&#30340;&#27169;&#22411;&#26377;&#19968;&#20010;&#21483;&#20570;&#30340;&#26041;&#27861;&#12290;<code>fireModelEvent<\/code>&#36825;&#20801;&#35768;&#24744;&#21019;&#24314;&#21644;&#22788;&#29702;&#33258;&#23450;&#20041;&#20107;&#20214;&#12290;<\/p><pre><code>protected function fireCustomEvent()\n{\n    if ($this-&gt;fireModelEvent('customEvent') === false) {\n        return false;\n    }\n    \n    \/\/ Custom logic here\n}\n<\/code><\/pre><h2>&#20107;&#20214;&#21644;&#38431;&#21015;<\/h2><p>&#36890;&#36807;&#27169;&#22411;&#20107;&#20214;&#35302;&#21457;&#30340;&#23494;&#38598;&#22411;&#20219;&#21153;&#65292;&#22914;&#21457;&#36865;&#30005;&#23376;&#37038;&#20214;&#65292;&#21487;&#20197;&#36890;&#36807;&#38431;&#21015;&#26469;&#25552;&#39640;&#24212;&#29992;&#31243;&#24207;&#30340;&#24615;&#33021;&#12290;&#20320;&#21487;&#20197;&#36731;&#26494;&#22320;&#20570;&#21040;&#36825;&#19968;&#28857;&#65292;&#36890;&#36807;&#23454;&#29616;&#20197;&#19979;&#21151;&#33021;&#65306;<code>ShouldQueue<\/code>&#22312;&#20107;&#20214;&#30417;&#21548;&#22120;&#20013;&#65292;&#35831;&#25552;&#20379;&#25509;&#21475;&#12290;<\/p><pre><code>use IlluminateContractsQueueShouldQueue;\nuse IlluminateQueueInteractsWithQueue;\n\nclass SomeIntensiveTaskListener implements ShouldQueue\n{\n    use InteractsWithQueue;\n\n    public function handle()\n    {\n        \/\/ Implement handle() with your logic.\n    }\n}<\/code><\/pre><p>&#35831;&#21442;&#38405;&#65306;<\/p><p>&#25042;&#21152;&#36733;&#27969;&#24335;&#32467;&#26524;&#22312;Laravel&#26597;&#35810;&#26500;&#24314;&#22120;&#20013;&#30340;&#25945;&#31243;&#19982;&#31034;&#20363;<\/p><p>&#20351;&#29992;Mailgun&#22312;Laravel&#20013;&#21457;&#36865;&#30005;&#23376;&#37038;&#20214;&#30340;&#26041;&#27861;&#22914;&#19979;&#65306;\n\n&#39318;&#20808;&#65292;&#30830;&#20445;&#24050;&#32463;&#23433;&#35013;&#20102;Mailgun&#30340;&#23448;&#26041;PHP&#24211;&#12290;\n&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;Laravel&#39033;&#30446;&#25110;&#20351;&#29992;&#29616;&#26377;&#39033;&#30446;&#12290;\n&#22312;&#39033;&#30446;&#30340;&#26681;&#30446;&#24405;&#19979;&#21019;&#24314;&#19968;&#20010;&#21517;&#20026; config\/mail.php &#30340;&#25991;&#20214;&#65292;&#24182;&#28155;&#21152;&#20197;&#19979;&#37197;&#32622;&#65306;\nreturn [\n&#8216;driver&#8217; =&gt; env(&#8216;MAIL_DRIVER&#8217;, &#8216;mailgun&#8217;),\n\/\/ &#20854;&#20182;&#37197;&#32622;&#8230;\n];\n&#22312; env() &#20989;&#25968;&#21069;&#28155;&#21152; MAIL_DRIVER=mailgun &#26469;&#35774;&#32622;&#37038;&#20214;&#39537;&#21160;&#20026;Mailgun&#12290;\n&#28155;&#21152;&#20197;&#19979;&#20195;&#30721;&#21040; .env &#25991;&#20214;&#20013;&#20197;&#33719;&#21462;API&#23494;&#38053;&#21644;&#22495;&#21517;&#65306;\nMAILGUN_API_KEY=&lt;your-mailgun-api-key&gt;\nMAILGUN_DOMAIN=&lt;your-mailgun-domain&gt;\n&#26356;&#26032; app\/Providers\/AppServiceProvider.php &#25991;&#20214;&#20013;&#30340; boot &#26041;&#27861;&#65292;&#20197;&#21152;&#36733;Mailgun&#26381;&#21153;&#65306;\n\nuse Mail;\nuse IlluminateSupportFacadesApp;\n\nApp::bind(&#8216;mailer&#8217;, function () {\nreturn new MailgunMailgun(env(&#8216;MAILGUN_DOMAIN&#8217;), env(&#8216;MAILGUN_API_KEY&#8217;));\n});\n\n7. &#20351;&#29992; `Mail::to()`, `Mail::send()`, &#25110; `MailgunTransportMailgun` &#31867;&#26469;&#21457;&#36865;&#30005;&#23376;&#37038;&#20214;&#12290;\n\n&#27880;&#24847;&#65306;&#20197;&#19978;&#27493;&#39588;&#20551;&#35774;&#24744;&#24050;&#25317;&#26377;&#19968;&#20010;&#26377;&#25928;&#30340;Mailgun API&#23494;&#38053;&#24182;&#27880;&#20876;&#20102;&#19968;&#20010;Mailgun&#22495;&#12290;&#35831;&#26681;&#25454;&#24744;&#30340;&#38656;&#27714;&#35843;&#25972;&#36825;&#20123;&#20540;&#12290;<\/p><p>Laravel&#30340;&#38431;&#21015;&#31995;&#32479;&#65306;&#36890;&#36807;&#31034;&#20363;&#36827;&#34892;&#35299;&#37322;<\/p><h2>&#32467;&#35770;<\/h2><p>Eloquent&#27169;&#22411;&#20107;&#20214;&#26159;&#32500;&#25252;&#25972;&#27905;&#20195;&#30721;&#21644;&#24212;&#29992;&#21453;&#24212;&#24615;&#30340;&#37325;&#35201;&#24037;&#20855;&#12290;&#36890;&#36807;&#39640;&#25928;&#21033;&#29992;&#36825;&#20123;&#20107;&#20214;&#65292;&#20320;&#21487;&#20197;&#20445;&#25345;&#25511;&#21046;&#22120;&#31616;&#27905;&#12289;&#27169;&#22411;&#24178;&#20928;&#65292;&#20174;&#32780;&#26500;&#24314;&#19968;&#20010;&#26377;&#24207;&#30340;&#20195;&#30721;&#24211;&#12290;&#19981;&#35201;&#23475;&#24597;&#20351;&#29992;&#36825;&#20123;&#20107;&#20214;&#65307;&#23427;&#20204;&#21487;&#20197;&#26497;&#22823;&#22320;&#25913;&#21892;&#20320;&#30340;&#24037;&#20316;&#27969;&#31243;&#21644;&#24212;&#29992;&#31243;&#24207;&#36923;&#36753;&#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>Eloquent &#26159; Laravel &#30340; ORM&#65288;&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#65289;&#26694;&#26550;&#30340;&#19968;&#37096;&#20998;&#65292;&#23427;&#25552;&#20379;&#20102;&#23545; Eloquent &#27169;&#22411;&#30340;&#32534;&#31243;&#25509;&#21475;&#12290;&#27169;&#22411;&#20107;&#20214;&#26159; Eloquent &#20013;&#30340;&#19968;&#20010;&#21151;&#33021;&#65292;&#20801;&#35768;&#20320;&#22312;&#22788;&#29702;&#25968;&#25454;&#26102;&#28155;&#21152;&#39069;&#22806;&#30340;&#34892;&#20026;&#12290;<\/p>\n<p>&#20197;&#19979;&#26159;&#22914;&#20309;&#20351;&#29992;&#27169;&#22411;&#20107;&#20214;&#65306;<\/p>\n<h3>1. &#23433;&#35013;&#24182;&#37197;&#32622;&#27169;&#22411;&#20107;&#20214;<\/h3>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#23433;&#35013;&#24182;&#37197;&#32622;&#27169;&#22411;&#20107;&#20214;&#12290;&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21517;&#20026; <code>User<\/code> &#30340;&#27169;&#22411;&#65292;&#25105;&#20204;&#21487;&#20197;&#36825;&#26679;&#20570;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace App;\n\nuse IlluminateDatabaseEloquentModel;\nuse IlluminateDatabaseEloquentSoftDeletes;\n\nclass User extends Model\n{\n    use SoftDeletes;\n\n    protected $table = 'users';\n}<\/code><\/pre>\n<p>&#28982;&#21518;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#20197;&#19979;&#26041;&#24335;&#21551;&#29992;&#27169;&#22411;&#20107;&#20214;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppEvents;\n\nuse AppUser;\n\nclass UserDeletedEvent\n{\n    public function handle(User $user)\n    {\n        \/\/ &#22788;&#29702;&#29992;&#25143;&#21024;&#38500;&#20107;&#20214;\n        echo \"User {$user-&gt;name} has been deleted.\";\n    }\n}<\/code><\/pre>\n<h3>2. &#22312;&#27169;&#22411;&#26041;&#27861;&#19978;&#28155;&#21152;&#20107;&#20214;<\/h3>\n<p>&#29616;&#22312;&#65292;&#35753;&#25105;&#20204;&#21019;&#24314;&#19968;&#20010;&#21517;&#20026; <code>User<\/code> &#30340;&#26032;&#26041;&#27861;&#65292;&#24182;&#23558;&#23427;&#26631;&#35760;&#20026;&#35302;&#21457;&#27169;&#22411;&#20107;&#20214;&#12290;&#20363;&#22914;&#65292;&#25105;&#20204;&#23558;&#21019;&#24314;&#19968;&#20010;&#21517;&#20026; <code>save<\/code> &#30340;&#26041;&#27861;&#26469;&#20445;&#23384;&#29992;&#25143;&#21040;&#25968;&#25454;&#24211;&#12290;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace App;\n\nuse IlluminateDatabaseEloquentModel;\nuse IlluminateDatabaseEloquentSoftDeletes;\n\nclass User extends Model\n{\n    use SoftDeletes;\n\n    protected $table = 'users';\n\n    \/**\n     * Handle the model saving.\n     *\n     * @param IlluminateHttpRequest $request\n     *\/\n    protected function save(IlluminateHttpRequest $request)\n    {\n        \/\/ &#35843;&#29992;&#29238;&#31867;&#30340;&#26041;&#27861;\n        parent::save($request);\n\n        \/\/ &#21019;&#24314;&#19968;&#20010;&#20107;&#20214;\n        $this-&gt;fire(new UserDeletedEvent);\n    }\n}<\/code><\/pre>\n<h3>3. &#20351;&#29992;&#27169;&#22411;&#20107;&#20214;<\/h3>\n<p>&#29616;&#22312;&#65292;&#24403;&#25105;&#20204;&#20445;&#23384;&#29992;&#25143;&#26102;&#65292;&#22914;&#26524;&#29992;&#25143;&#34987;&#21024;&#38500;&#20102;&#65292;&#36825;&#20010;&#20107;&#20214;&#23601;&#20250;&#34987;&#25191;&#34892;&#12290;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppHttpControllers;\n\nuse IlluminateHttpRequest;\n\nclass UserController extends Controller\n{\n    public function store(Request $request)\n    {\n        \/\/ ...\n\n        \/\/ &#23384;&#20648;&#29992;&#25143;\n        $user = new User();\n        $user-&gt;fill($request-&gt;all());\n        $user-&gt;save();\n\n        return redirect('\/dashboard');\n    }\n\n    public function show(User $user)\n    {\n        \/\/ ...\n    }\n}\n\n\/\/ &#31034;&#20363;&#20195;&#30721;\n$user = User::find(1); \/\/ &#20551;&#35774;&#25105;&#20204;&#35201;&#26597;&#25214;&#29992;&#25143; ID &#20026; 1 &#30340;&#29992;&#25143;\n$user-&gt;show(); \/\/ &#22914;&#26524;&#29992;&#25143;&#23384;&#22312;&#19988;&#26410;&#34987;&#21024;&#38500;&#65292;&#21017;&#35843;&#29992;&#30456;&#24212;&#30340;&#35270;&#22270;<\/code><\/pre>\n<p>&#20197;&#19978;&#23601;&#26159;&#22312; Laravel &#20013;&#20351;&#29992;&#27169;&#22411;&#20107;&#20214;&#30340;&#22522;&#26412;&#27493;&#39588;&#12290;&#36825;&#26377;&#21161;&#20110;&#25552;&#39640;&#24212;&#29992;&#31243;&#24207;&#30340;&#23433;&#20840;&#24615;&#21644;&#21487;&#38752;&#24615;&#65292;&#22240;&#20026;&#20320;&#21487;&#20197;&#26681;&#25454;&#38656;&#35201;&#22788;&#29702;&#29305;&#23450;&#30340;&#22330;&#26223;&#21644;&#36923;&#36753;&#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;Eloquent&#20013;&#30340;&#27169;&#22411;&#20107;&#20214;&#65306;&#20840;&#38754;&#25351;&#21335; &#22312;&#038;#2..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[44],"tuisongtax":[],"class_list":["post-952","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\/952","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=952"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=952"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=952"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=952"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}