{"id":975,"date":"2025-06-12T03:59:19","date_gmt":"2025-06-11T19:59:19","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/laravel\/975.html"},"modified":"2025-06-12T03:59:19","modified_gmt":"2025-06-11T19:59:19","slug":"%e5%a6%82%e4%bd%95%e5%9c%a8eloquent%e4%b8%ad%e5%ae%9a%e4%b9%89%e5%92%8c%e4%bd%bf%e7%94%a8%e8%a7%82%e5%af%9f%e8%80%85","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/975.html","title":{"rendered":"\u5982\u4f55\u5728Eloquent\u4e2d\u5b9a\u4e49\u548c\u4f7f\u7528\u89c2\u5bdf\u8005"},"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>&#22312; Laravel &#20013;&#65292;&#35266;&#23519;&#32773;&#27169;&#24335;&#65288;Observer Pattern&#65289;&#26159;&#19968;&#31181;&#34892;&#20026;&#35774;&#35745;&#27169;&#24335;&#65292;&#29992;&#20110;&#23558;&#23545;&#35937;&#20043;&#38388;&#30340;&#20381;&#36182;&#20851;&#31995;&#35299;&#32806;&#65292;&#20351;&#24471;&#24403;&#19968;&#20010;&#23545;&#35937;&#30340;&#29366;&#24577;&#21457;&#29983;&#21464;&#21270;&#26102;&#65292;&#25152;&#26377;&#20381;&#36182;&#20110;&#23427;&#30340;&#23545;&#35937;&#37117;&#20250;&#33258;&#21160;&#34987;&#36890;&#30693;&#24182;&#26356;&#26032;&#12290;Laravel &#25552;&#20379;&#20102;&#20869;&#32622;&#30340;&#35266;&#23519;&#32773;&#26426;&#21046;&#65292;&#36890;&#36807; <code>Event<\/code> &#21644; <code>Observer<\/code> &#25509;&#21475;&#26469;&#23454;&#29616;&#12290;<\/p>\n<h3>&#23450;&#20041;&#35266;&#23519;&#32773;<\/h3>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#35266;&#23519;&#32773;&#31867;&#12290;&#36825;&#20010;&#31867;&#21487;&#20197;&#32487;&#25215;&#33258; <code>IlluminateContractsQueueShouldQueue<\/code> &#25509;&#21475;&#65288;&#22914;&#26524;&#38656;&#35201;&#24322;&#27493;&#22788;&#29702;&#65289;&#65292;&#25110;&#32773;&#30452;&#25509;&#23454;&#29616; <code>IlluminateContractsSupportHtmlable<\/code> &#25509;&#21475;&#12290;<\/p>\n<pre><code class=\"language-php\">namespace AppObservers;\n\nuse IlluminateContractsQueueShouldQueue;\nuse IlluminateSupportFacadesLog;\n\nclass UserObserver implements ShouldQueue\n{\n    public function created($user)\n    {\n        Log::info('User created: ' . $user-&gt;name);\n    }\n\n    public function updated($user)\n    {\n        Log::info('User updated: ' . $user-&gt;name);\n    }\n\n    public function deleted($user)\n    {\n        Log::info('User deleted: ' . $user-&gt;name);\n    }\n}<\/code><\/pre>\n<h3>&#27880;&#20876;&#35266;&#23519;&#32773;<\/h3>\n<p>&#25509;&#19979;&#26469;&#65292;&#20320;&#38656;&#35201;&#27880;&#20876;&#20320;&#30340;&#35266;&#23519;&#32773;&#21040;&#26381;&#21153;&#25552;&#20379;&#22120;&#20013;&#12290;&#20320;&#21487;&#20197;&#20351;&#29992; <code>EventServiceProvider<\/code> &#26469;&#23454;&#29616;&#36825;&#19968;&#28857;&#12290;<\/p>\n<pre><code class=\"language-php\">\/\/ app\/Providers\/EventServiceProvider.php\n\nnamespace AppProviders;\n\nuse IlluminateFoundationSupportProvidersEventServiceProvider as ServiceProvider;\nuse AppEventsUserCreated;\nuse AppEventsUserUpdated;\nuse AppEventsUserDeleted;\nuse AppObserversUserObserver;\n\nclass EventServiceProvider extends ServiceProvider\n{\n    protected $listen = [\n        UserCreated::class =&gt; [\n            UserObserver::class,\n        ],\n        UserUpdated::class =&gt; [\n            UserObserver::class,\n        ],\n        UserDeleted::class =&gt; [\n            UserObserver::class,\n        ],\n    ];\n\n    protected $subscribe = [];\n\n    public function boot()\n    {\n        parent::boot();\n\n        \/\/ Registering the observer\n        Event::subscribe(new UserObserver());\n    }\n}<\/code><\/pre>\n<h3>&#20351;&#29992;&#20107;&#20214;<\/h3>\n<p>&#29616;&#22312;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#21457;&#24067;&#20107;&#20214;&#26469;&#35302;&#21457;&#35266;&#23519;&#32773;&#30340;&#22238;&#35843;&#26041;&#27861;&#12290;<\/p>\n<pre><code class=\"language-php\">\/\/ app\/Http\/Controllers\/UserController.php\n\nnamespace AppHttpControllers;\n\nuse AppModelsUser;\nuse IlluminateHttpRequest;\n\nclass UserController extends Controller\n{\n    public function store(Request $request)\n    {\n        $user = User::create([\n            'name' =&gt; $request-&gt;input('name'),\n            'email' =&gt; $request-&gt;input('email'),\n        ]);\n\n        \/\/ Triggering the event\n        event(new UserCreated($user));\n\n        return redirect()-&gt;route('users.index');\n    }\n\n    public function update(User $user, Request $request)\n    {\n        $user-&gt;update([\n            'name' =&gt; $request-&gt;input('name'),\n            'email' =&gt; $request-&gt;input('email'),\n        ]);\n\n        \/\/ Triggering the event\n        event(new UserUpdated($user));\n\n        return redirect()-&gt;route('users.show', $user-&gt;id);\n    }\n\n    public function destroy(User $user)\n    {\n        $user-&gt;delete();\n\n        \/\/ Triggering the event\n        event(new UserDeleted($user));\n\n        return redirect()-&gt;route('users.index');\n    }\n}<\/code><\/pre>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#31616;&#21333;&#30340;&#29992;&#25143;&#27169;&#22411; <code>User<\/code>&#65292;&#24182;&#19988;&#25105;&#20204;&#24076;&#26395;&#22312;&#29992;&#25143;&#21019;&#24314;&#12289;&#26356;&#26032;&#25110;&#21024;&#38500;&#26102;&#35760;&#24405;&#26085;&#24535;&#12290;<\/p>\n<pre><code class=\"language-php\">\/\/ app\/Models\/User.php\n\nnamespace AppModels;\n\nuse IlluminateDatabaseEloquentModel;\n\nclass User extends Model\n{\n    use HasFactory;\n\n    protected $fillable = ['name', 'email'];\n\n    public static function boot()\n    {\n        parent::boot();\n\n        \/\/ Registering the observer\n        Event::subscribe(new UserObserver());\n    }\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#24403;&#25105;&#20204;&#21019;&#24314;&#12289;&#26356;&#26032;&#25110;&#21024;&#38500;&#19968;&#20010;&#29992;&#25143;&#26102;&#65292;&#30456;&#24212;&#30340;&#35266;&#23519;&#32773;&#26041;&#27861;&#20250;&#34987;&#35843;&#29992;&#65292;&#24182;&#22312;&#25511;&#21046;&#21488;&#36755;&#20986;&#26085;&#24535;&#20449;&#24687;&#12290;<\/p>\n<p>&#36890;&#36807;&#36825;&#31181;&#26041;&#24335;&#65292;&#20320;&#21487;&#20197;&#36731;&#26494;&#22320;&#22312; Laravel &#20013;&#23454;&#29616;&#35266;&#23519;&#32773;&#27169;&#24335;&#65292;&#20174;&#32780;&#25552;&#39640;&#20195;&#30721;&#30340;&#28789;&#27963;&#24615;&#21644;&#21487;&#32500;&#25252;&#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;Laravel&#19982;Eloquent&#36827;&#34892;&#20132;&#20114;&#26102;&#65292;&#24120;&#24120;&#38656;&#35201;&#22312;&#27169;&#22411;&#29983;&#21629;&#21608;&#26399;&#30340;&#19981;&#21516;&#38454;&#27573;&#25191;&#34892;&#26576;&#20123;&#25805;&#20316;&#65292;&#20363;&#22914;&#21019;&#24314;&#12289;&#26356;&#26032;&#25110;&#21024;&#38500;&#35760;&#24405;&#12290;Eloquent&#30340;&#35266;&#23519;&#32773;&#31867;&#25552;&#20379;&#20102;&#26041;&#20415;&#30340;&#26041;&#27861;&#26469;&#38057;&#20837;&#36825;&#20123;&#29983;&#21629;&#21608;&#26399;&#20107;&#20214;&#65292;&#20174;&#32780;&#35753;&#20320;&#30340;&#20195;&#30721;&#20445;&#25345;&#25972;&#27905;&#21644;&#21487;&#32500;&#25252;&#12290;&#26412;&#25945;&#31243;&#23558;&#36890;&#36807;&#19968;&#31995;&#21015;&#31034;&#20363;&#65288;&#20174;&#22522;&#30784;&#21040;&#39640;&#32423;&#65289;&#23637;&#31034;&#22914;&#20309;&#23450;&#20041;&#21644;&#20351;&#29992;Eloquent&#30340;&#35266;&#23519;&#32773;&#12290;<\/p><h2>&#12298;&#22522;&#30784;&#31687;&#12299;<\/h2><p>&#19968;&#20010;Eloquent&#35266;&#23519;&#32773;&#31867;&#20801;&#35768;&#24744;&#23450;&#20041;&#26041;&#27861;&#26469;&#30417;&#21548;&#21508;&#31181;Eloquent&#20107;&#20214;&#12290;&#36825;&#20123;&#20107;&#20214;&#20351;&#24744;&#21487;&#20197;&#26681;&#25454;&#25805;&#20316;&#22914;&#21019;&#24314;&#12289;&#26356;&#26032;&#12289;&#20445;&#23384;&#12289;&#21024;&#38500;&#12289;&#24674;&#22797;&#31561;&#22312;&#27169;&#22411;&#19978;&#25191;&#34892;&#25805;&#20316;&#12290;&#36890;&#36807;&#20351;&#29992;&#36825;&#20123;&#26041;&#27861;&#65292;&#24744;&#21487;&#20197;&#20174;&#24744;&#30340;&#27169;&#22411;&#20013;&#37325;&#26500;&#37325;&#22797;&#30340;&#20195;&#30721;&#65292;&#24182;&#30830;&#20445;&#24212;&#29992;&#26550;&#26500;&#20013;&#30340;&#20851;&#27880;&#28857;&#20998;&#31163;&#12290;<\/p><h3>&#23450;&#20041;&#19968;&#20010;Eloquent&#35266;&#23519;&#32773;<\/h3><pre><code>&lt;?php\n\nnamespace AppObservers;\n\nuse AppModelsUser;\n\nclass UserObserver\n{\n    public function creating(User $user)\n    {\n        \/\/ Logic before a user record is created\n    }\n\n    public function created(User $user)\n    {\n        \/\/ Logic after a user record is created\n    }\n\n    \/\/ Other model events...\n}\n<\/code><\/pre><h3>&#27880;&#20876;&#19968;&#20010;eloquent&#35266;&#23519;&#32773;<\/h3><p>&#20026;&#20102;&#27880;&#20876;&#35266;&#23519;&#32773;&#65292;&#36890;&#24120;&#20250;&#22312;&#20320;&#30340;&#26381;&#21153;&#25552;&#20379;&#31243;&#24207;&#30340; boot &#26041;&#27861;&#20869;&#36827;&#34892;&#25805;&#20316;&#65292;&#36890;&#24120;&#26159; AppServiceProvider&#12290;&#20320;&#21487;&#20197;&#20351;&#29992; observe &#26041;&#27861;&#26469;&#32465;&#23450;&#35266;&#23519;&#32773;&#31867;&#21040;&#27169;&#22411;&#19978;&#12290;<\/p><pre><code>&lt;?php\n\nnamespace AppProviders;\n\nuse IlluminateSupportServiceProvider;\nuse AppModelsUser;\nuse AppObserversUserObserver;\n\nclass AppServiceProvider extends ServiceProvider\n{\n    public function boot()\n    {\n        User::observe(UserObserver::class);\n    }\n}\n<\/code><\/pre><h3>&#35266;&#23519;&#32773;&#26041;&#27861;<\/h3><p>&#24744;&#21487;&#20197;&#23450;&#20041;&#35266;&#23519;&#32773;&#26041;&#27861;&#65306;<\/p><p>&#20462;&#22797;&#20102;<\/p><p>&#24674;&#22797;<\/p><p>&#21024;&#38500;&#20102;&#12290;<\/p><p>&#21024;&#38500;<\/p><p>&#20445;&#23384;&#20102;&#12290;<\/p><p>&#33410;&#30465;<\/p><p>&#26356;&#26032;&#20102;&#12290;<\/p><p>&#26356;&#26032;&#20013;<\/p><p>&#21019;&#24314;&#25104;&#21151;&#20102;&#12290;<\/p><p>&#21019;&#24314;<\/p><p>&#24050;&#33719;&#21462;&#21040;&#20449;&#24687;&#12290;<\/p><h3>&#33258;&#21160;&#26102;&#38388;&#25139;<\/h3><p>&#35813;&#31034;&#20363;&#23637;&#31034;&#20102;&#22914;&#20309;&#33258;&#21160;&#20026;&#33258;&#23450;&#20041;&#23383;&#27573;&#35774;&#32622;&#26102;&#38388;&#25139;&#65292;&#27599;&#24403;&#35760;&#24405;&#20445;&#23384;&#25110;&#26356;&#26032;&#26102;&#12290;\n&#22312;&#36827;&#34892;&#39033;&#30446;&#24320;&#21457;&#26102;&#65292;&#32463;&#24120;&#20250;&#36935;&#21040;&#21508;&#31181;&#38656;&#27714;&#65292;&#27604;&#22914;&#65306;&#38656;&#35201;&#33719;&#21462;&#21040;&#26576;&#20010;&#29992;&#25143;&#30340;&#30331;&#24405;&#26102;&#38388;&#21644;&#36864;&#20986;&#26102;&#38388;&#65307;&#23545;&#26576;&#19968;&#20010;&#21830;&#21697;&#30340;&#38144;&#21806;&#25968;&#25454;&#36827;&#34892;&#32479;&#35745;&#20998;&#26512;&#31561;&#12290;&#20026;&#20102;&#26041;&#20415;&#22320;&#22788;&#29702;&#36825;&#20123;&#24773;&#20917;&#65292;&#25105;&#20204;&#21487;&#20197;&#20351;&#29992;SQL&#35821;&#21477;&#20013;&#30340;DUAL&#34920;&#26469;&#36827;&#34892;&#25805;&#20316;&#12290;&#20363;&#22914;&#65292;&#22914;&#26524;&#25105;&#20204;&#35201;&#26597;&#35810;&#24403;&#21069;&#29992;&#25143;&#30331;&#24405;&#30340;&#26102;&#38388;&#21644;&#36864;&#20986;&#26102;&#38388;&#65292;&#21487;&#20197;&#32534;&#20889;&#22914;&#19979;&#20195;&#30721;&#65306;\nSELECT login_time, logout_time FROM DUAL WHERE user_id = 1;\n&#36825;&#37324;&#30340;login_time&#21644;logout_time&#23601;&#26159;&#25105;&#20204;&#24819;&#35201;&#30340;&#32467;&#26524;&#65292;&#23427;&#20204;&#20998;&#21035;&#20195;&#34920;&#20102;&#24403;&#21069;&#29992;&#25143;&#30340;&#30331;&#24405;&#26102;&#38388;&#21644;&#36864;&#20986;&#26102;&#38388;&#12290;&#36825;&#26679;&#65292;&#25105;&#20204;&#23601;&#33021;&#22815;&#36731;&#26494;&#22320;&#33719;&#21462;&#21040;&#25105;&#20204;&#38656;&#35201;&#30340;&#25968;&#25454;&#12290;\n&#21478;&#22806;&#65292;&#22312;&#36827;&#34892;&#25968;&#25454;&#24211;&#25805;&#20316;&#26102;&#65292;&#26377;&#26102;&#20505;&#20250;&#28041;&#21450;&#21040;&#19968;&#20123;&#22797;&#26434;&#30340;&#36923;&#36753;&#21028;&#26029;&#25110;&#32773;&#26465;&#20214;&#21305;&#37197;&#12290;&#36825;&#26102;&#20505;&#65292;&#23601;&#21487;&#20197;&#21033;&#29992;SQL&#30340;CASE WHEN&#32467;&#26500;&#26469;&#23454;&#29616;&#12290;&#20363;&#22914;&#65292;&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21517;&#20026;orders&#30340;&#34920;&#65292;&#20854;&#20013;&#21253;&#21547;&#20102;&#19968;&#20123;&#35746;&#21333;&#20449;&#24687;&#65292;&#21253;&#25324;&#35746;&#21333;&#37329;&#39069;&#12289;&#35746;&#21333;&#29366;&#24577;&#31561;&#12290;&#22914;&#26524;&#25105;&#20204;&#24819;&#35201;&#26681;&#25454;&#35746;&#21333;&#30340;&#29366;&#24577;&#26469;&#35843;&#25972;&#35746;&#21333;&#37329;&#39069;&#65292;&#23601;&#21487;&#20197;&#20351;&#29992;&#22914;&#19979;&#30340;SQL&#35821;&#21477;&#65306;\nUPDATE orders SET amount *= CASE \n WHEN status = &#8216;completed&#8217; THEN 1.25\n ELSE 1\n END WHERE order_id = 1;\n&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#39318;&#20808;&#36890;&#36807;CASE WHEN&#32467;&#26500;&#26469;&#21028;&#26029;&#35746;&#21333;&#30340;&#29366;&#24577;&#26159;&#21542;&#20026;&ldquo;&#23436;&#25104;&rdquo;&#12290;&#22914;&#26524;&#26159;&ldquo;&#23436;&#25104;&rdquo;&#65292;&#37027;&#20040;&#25105;&#20204;&#23558;&#35746;&#21333;&#37329;&#39069;&#20056;&#20197;1.25&#65307;&#21542;&#21017;&#65292;&#20445;&#25345;&#21407;&#26679;&#19981;&#21464;&#12290;&#26368;&#21518;&#65292;&#25105;&#20204;&#22312;WHERE&#23376;&#21477;&#20013;&#25351;&#23450;&#35201;&#20462;&#25913;&#30340;&#35746;&#21333;ID&#20026;1&#12290;&#36825;&#26679;&#65292;&#25105;&#20204;&#23601;&#23454;&#29616;&#20102;&#26681;&#25454;&#35746;&#21333;&#29366;&#24577;&#35843;&#25972;&#35746;&#21333;&#37329;&#39069;&#30340;&#21151;&#33021;&#12290;\n&#24635;&#30340;&#26469;&#35828;&#65292;SQL&#35821;&#35328;&#20316;&#20026;&#19968;&#31181;&#24378;&#22823;&#30340;&#24037;&#20855;&#65292;&#20026;&#25105;&#20204;&#25552;&#20379;&#20102;&#35768;&#22810;&#20415;&#25463;&#30340;&#25805;&#20316;&#26041;&#27861;&#12290;&#21482;&#35201;&#25484;&#25569;&#22909;SQL&#30340;&#22522;&#26412;&#35821;&#27861;&#21644;&#24120;&#29992;&#20989;&#25968;&#65292;&#23601;&#33021;&#22815;&#36731;&#26494;&#35299;&#20915;&#24456;&#22810;&#23454;&#38469;&#38382;&#39064;&#12290;<\/p><pre><code>&lt;?php\n\nnamespace AppObservers;\n\nuse AppModelsPost;\n\nclass PostObserver\n{\n    public function saving(Post $post)\n    {\n        $post-&gt;last_action_at = now();\n    }\n}\n<\/code><\/pre><p>&#22312;&#20320;&#30340; AppServiceProvider &#20013;&#65292;&#20320;&#24212;&#35813;&#23558;&#36825;&#20010;&#35266;&#23519;&#32773;&#38468;&#21152;&#21040; Post &#27169;&#22411;&#19978;&#65306;<\/p><pre><code>&lt;?php\n\nnamespace AppProviders;\n\nuse AppModelsPost;\nuse AppObserversPostObserver;\n\nclass AppServiceProvider extends ServiceProvider\n{\n    public function boot()\n    {\n        Post::observe(PostObserver::class);\n    }\n}\n<\/code><\/pre><h2>&#39640;&#32423;&#35266;&#27979;&#32773;&#20351;&#29992;&#26041;&#27861;<\/h2><h3>&#20381;&#36182;&#27880;&#20837;&#65288;Dependency Injection&#65292;DI&#65289;&#26159;&#19968;&#31181;&#35774;&#35745;&#27169;&#24335;&#21644;&#24320;&#21457;&#23454;&#36341;&#65292;&#23427;&#36890;&#36807;&#38598;&#20013;&#31649;&#29702;&#23545;&#35937;&#20043;&#38388;&#30340;&#20381;&#36182;&#20851;&#31995;&#26469;&#31616;&#21270;&#20195;&#30721;&#30340;&#26500;&#24314;&#21644;&#32500;&#25252;&#12290;&#22312;&#36825;&#31181;&#27169;&#24335;&#19979;&#65292;&#20381;&#36182;&#20851;&#31995;&#19981;&#26159;&#22312;&#31867;&#20869;&#37096;&#30452;&#25509;&#23450;&#20041;&#30340;&#65292;&#32780;&#26159;&#30001;&#22806;&#37096;&#25552;&#20379;&#32773;&#36890;&#36807;&#25509;&#21475;&#25110;&#26500;&#36896;&#20989;&#25968;&#21442;&#25968;&#20256;&#36882;&#36807;&#26469;&#12290;&#36825;&#26679;&#20570;&#30340;&#22909;&#22788;&#26159;&#21487;&#20197;&#20351;&#31995;&#32479;&#26356;&#21152;&#28789;&#27963;&#12289;&#26131;&#20110;&#27979;&#35797;&#20197;&#21450;&#26356;&#23481;&#26131;&#36827;&#34892;&#37325;&#26500;&#12290;<\/h3><p>&#35266;&#23519;&#32773;&#20063;&#21487;&#20197;&#36890;&#36807;&#20381;&#36182;&#27880;&#20837;&#25509;&#25910;&#20381;&#36182;&#39033;&#12290;&#20363;&#22914;&#65292;&#22914;&#26524;&#20320;&#38656;&#35201;&#22312;&#29992;&#25143;&#27880;&#20876;&#21518;&#21457;&#36865;&#30005;&#23376;&#37038;&#20214;&#65292;&#20320;&#21487;&#20197;&#21521;&#35266;&#23519;&#32773;&#20013;&#27880;&#20837;&#37038;&#20214;&#26381;&#21153;&#12290;<\/p><pre><code>&lt;?php\n\nnamespace AppObservers;\n\nuse AppModelsUser;\nuse IlluminateMailMailer;\n\nclass UserObserver\n{\n    protected $mailer;\n\n    public function __construct(Mailer $mailer)\n    {\n        $this-&gt;mailer = $mailer;\n    }\n\n    public function created(User $user)\n    {\n        \/\/ Send email...\n    }\n}\n<\/code><\/pre><h3>&#20351;&#29992;&#35266;&#23519;&#32773;&#27169;&#24335;&#19982;&#38431;&#21015;&#30456;&#32467;&#21512;<\/h3><p>&#22914;&#26524;&#20320;&#38656;&#35201;&#25191;&#34892;&#32791;&#26102;&#30340;&#20219;&#21153;&#65292;&#27604;&#22914;&#21457;&#36865;&#30005;&#23376;&#37038;&#20214;&#65292;&#20320;&#24212;&#35813;&#25490;&#38431;&#36825;&#20123;&#20219;&#21153;&#20197;&#20351;&#24212;&#29992;&#31243;&#24207;&#26356;&#21709;&#24212;&#12290;&#20197;&#19979;&#26159;&#22914;&#20309;&#22312;&#35266;&#23519;&#32773;&#26041;&#27861;&#20869;&#25490;&#38431;&#37038;&#20214;&#24037;&#20316;&#30340;&#31034;&#20363;&#12290;<\/p><pre><code>&lt;?php\n\nnamespace AppObservers;\n\nuse AppJobsSendWelcomeEmail;\nuse AppModelsUser;\n\nclass UserObserver\n{\n    public function created(User $user)\n    {\n        dispatch(new SendWelcomeEmail($user));\n    }\n}\n<\/code><\/pre><h3>&#27880;&#24847;&#20107;&#39033;&#21644;&#32771;&#34385;&#20107;&#39033;<\/h3><p>&#35266;&#23519;&#32773;&#21487;&#20197;&#25552;&#39640;&#20195;&#30721;&#30340;&#21487;&#32500;&#25252;&#24615;&#65292;&#20294;&#20063;&#20250;&#24341;&#20837;&#19968;&#23618;&#38388;&#25509;&#24615;&#65292;&#36825;&#21487;&#33021;&#20250;&#20351;&#20195;&#30721;&#26356;&#38590;&#20197;&#36861;&#36394;&#12290;&#22312;&#20351;&#29992;&#35266;&#23519;&#32773;&#26102;&#65292;&#35831;&#21153;&#24517;&#32771;&#34385;&#20854;&#28508;&#22312;&#30340;&#36882;&#24402;&#38382;&#39064;&#65292;&#20363;&#22914;&#24403;&#19968;&#20010;&#35266;&#23519;&#32773;&#26080;&#24847;&#20013;&#35302;&#21457;&#21478;&#19968;&#20010;&#20107;&#20214;&#26102;&#12290;<\/p><h2>&#32467;&#35770;<\/h2><p>&#35266;&#23519;&#32773;&#27169;&#24335;&#22312;Eloquent&#26694;&#26550;&#19979;&#20026;Laravel&#24212;&#29992;&#31243;&#24207;&#25552;&#20379;&#20102;&#20248;&#38597;&#30340;&#27169;&#22411;&#29983;&#21629;&#21608;&#26399;&#20107;&#20214;&#22788;&#29702;&#26041;&#24335;&#12290;&#23427;&#20204;&#26131;&#20110;&#23454;&#29616;&#65292;&#22914;&#26524;&#36866;&#24403;&#20351;&#29992;&#65292;&#21487;&#20197;&#23548;&#33268;&#26356;&#21487;&#32500;&#25252;&#21644;&#25193;&#23637;&#24615;&#24378;&#30340;&#20195;&#30721;&#12290;&#27491;&#22914;&#20219;&#20309;&#35774;&#35745;&#27169;&#24335;&#19968;&#26679;&#65292;&#27491;&#30830;&#20351;&#29992;&#23427;&#20204;&#20197;&#20805;&#20998;&#21463;&#30410;&#33267;&#20851;&#37325;&#35201;&#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>&#22312; Laravel &#30340; Eloquent &#27169;&#22411;&#24211;&#20013;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807; <code>observe<\/code> &#26041;&#27861;&#26469;&#23450;&#20041;&#35266;&#23519;&#32773;&#65288;Observer&#65289;&#12290;&#35266;&#23519;&#32773;&#26159;&#19968;&#31181;&#30417;&#21548;&#22120;&#65292;&#24403;&#27169;&#22411;&#30340;&#23646;&#24615;&#25913;&#21464;&#26102;&#65292;&#23427;&#20204;&#20250;&#25910;&#21040;&#36890;&#30693;&#24182;&#25191;&#34892;&#30456;&#24212;&#30340;&#25805;&#20316;&#12290;<\/p>\n<p>&#20197;&#19979;&#26159;&#22914;&#20309;&#22312; Eloquent &#20013;&#23450;&#20041;&#21644;&#20351;&#29992;&#30340;&#35266;&#23519;&#32773;&#30340;&#31034;&#20363;&#65306;<\/p>\n<ol>\n<li>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#31867;&#65292;&#24182;&#37325;&#20889; <code>observe<\/code> &#26041;&#27861;&#65292;&#35813;&#26041;&#27861;&#25509;&#25910;&#20004;&#20010;&#21442;&#25968;&#65306;&#19968;&#20010;&#26159;&#35266;&#23519;&#23545;&#35937;&#65292;&#21478;&#19968;&#20010;&#26159;&#35266;&#23519;&#20107;&#20214;&#12290;<\/li>\n<\/ol>\n<pre><code class=\"language-php\">use IlluminateSupportFacadesEvent;\n\nclass MyModel extends Model {\n    protected $table = 'my_table';\n\n    public function observe($observer, $event)\n    {\n        if ($event == 'created') {\n            Event::fire('MyEvent', [\n                'model' =&gt; $this,\n            ]);\n        }\n    }\n}<\/code><\/pre>\n<ol start=\"2\">\n<li>&#28982;&#21518;&#65292;&#20320;&#38656;&#35201;&#22312;&#25511;&#21046;&#22120;&#25110;&#20854;&#20182;&#38656;&#35201;&#30340;&#22320;&#26041;&#35843;&#29992;&#35266;&#23519;&#32773;&#30340;&#26041;&#27861;&#65292;&#36825;&#23558;&#35302;&#21457;&#20107;&#20214;&#65292;&#24182;&#22312;&#35266;&#23519;&#32773;&#22788;&#29702;&#23436;&#25104;&#21518;&#36820;&#22238;&#21709;&#24212;&#12290;<\/li>\n<\/ol>\n<pre><code class=\"language-php\">$my_model = new MyModel();\n\n$my_model-&gt;observe(function ($observer) {\n    \/\/ &#22312;&#36825;&#37324;&#28155;&#21152;&#20320;&#30340;&#36923;&#36753;\n});\n\n\/\/ &#25110;&#32773;&#26356;&#31616;&#21333;&#30340;&#26041;&#24335;&#65292;&#30452;&#25509;&#22312;&#20107;&#20214;&#22788;&#29702;&#22120;&#20013;&#36827;&#34892;&#22788;&#29702;\n$my_model-&gt;observe(new MyEventHandler());<\/code><\/pre>\n<ol start=\"3\">\n<li>&#35266;&#23519;&#32773;&#21487;&#20197;&#22788;&#29702;&#21508;&#31181;&#20107;&#20214;&#65292;&#20363;&#22914;:<\/li>\n<\/ol>\n<ul>\n<li><code>'created'<\/code>: &#24403;&#26576;&#26465;&#35760;&#24405;&#34987;&#21019;&#24314;&#26102;&#12290;<\/li>\n<li><code>'updated'<\/code>: &#24403;&#26576;&#26465;&#35760;&#24405;&#34987;&#26356;&#26032;&#26102;&#12290;<\/li>\n<li><code>'deleted'<\/code>: &#24403;&#26576;&#26465;&#35760;&#24405;&#34987;&#21024;&#38500;&#26102;&#12290;<\/li>\n<li><code>'restored'<\/code>: &#24403;&#26576;&#26465;&#35760;&#24405;&#20174;&#22238;&#25910;&#31449;&#24674;&#22797;&#26102;&#12290;<\/li>\n<li><code>'forceDeleted'<\/code>: &#24403;&#26576;&#26465;&#35760;&#24405;&#24378;&#21046;&#34987;&#21024;&#38500;&#26102;&#12290;<\/li>\n<\/ul>\n<ol start=\"4\">\n<li>&#20026;&#20102;&#30830;&#20445;&#35266;&#23519;&#32773;&#27491;&#30830;&#22320;&#22788;&#29702;&#20107;&#20214;&#65292;&#20320;&#24212;&#35813;&#26816;&#26597; <code>$event<\/code> &#21442;&#25968;&#26159;&#21542;&#19982;&#39044;&#26399;&#30456;&#31526;&#65292;&#25110;&#32773;&#26681;&#25454;&#38656;&#35201;&#23545; <code>$observer<\/code> &#23454;&#20363;&#36827;&#34892;&#19968;&#20123;&#39069;&#22806;&#30340;&#25805;&#20316;&#12290;<\/li>\n<\/ol>\n<p>&#20197;&#19978;&#23601;&#26159;&#22312; Laravel Eloquent &#20013;&#23450;&#20041;&#21644;&#20351;&#29992;&#35266;&#23519;&#32773;&#30340;&#31616;&#35201;&#25945;&#31243;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#22312; Laravel &#20013;&#65292;&#35266;&#23519;&#32773;&#27169;&#24335;&#65288;Observer Pattern&#65289;&#26159;&#19968;&#31181;&#038;#3..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[44],"tuisongtax":[],"class_list":["post-975","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\/975","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=975"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=975"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=975"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=975"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}