{"id":973,"date":"2025-06-12T03:56:29","date_gmt":"2025-06-11T19:56:29","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/laravel\/973.html"},"modified":"2025-06-12T03:56:29","modified_gmt":"2025-06-11T19:56:29","slug":"%e5%9c%a8eloquent%e4%b8%ad%e4%bf%ae%e5%89%aa%e6%a8%a1%e5%9e%8b%ef%bc%9a%e6%95%99%e7%a8%8b%e4%b8%8e%e7%a4%ba%e4%be%8b","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/973.html","title":{"rendered":"\u5728Eloquent\u4e2d\u4fee\u526a\u6a21\u578b\uff1a\u6559\u7a0b\u4e0e\u793a\u4f8b"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#26631;&#39064;&#65306;&#22312;Eloquent&#20013;&#20462;&#21098;&#27169;&#22411;&#65306;&#25945;&#31243;&#19982;&#31034;&#20363;<\/p>\n<p>&#22312; Laravel &#20013;&#65292;Eloquent &#26159;&#19968;&#20010;&#38750;&#24120;&#24378;&#22823;&#30340; ORM&#65288;&#23545;&#35937;&#20851;&#31995;&#26144;&#23556;&#65289;&#65292;&#23427;&#20351;&#24471;&#25968;&#25454;&#24211;&#25805;&#20316;&#21464;&#24471;&#31616;&#21333;&#32780;&#30452;&#35266;&#12290;&#28982;&#32780;&#65292;&#26377;&#26102;&#20505;&#25105;&#20204;&#21487;&#33021;&#38656;&#35201;&#23545;&#26597;&#35810;&#32467;&#26524;&#36827;&#34892;&#19968;&#20123;&#39069;&#22806;&#30340;&#22788;&#29702;&#65292;&#20363;&#22914;&#20462;&#21098;&#25968;&#25454;&#12290;&#26412;&#25991;&#23558;&#20171;&#32461;&#22914;&#20309;&#20351;&#29992; Eloquent &#36827;&#34892;&#27169;&#22411;&#20462;&#21098;&#65292;&#24182;&#25552;&#20379;&#19968;&#20010;&#31034;&#20363;&#20195;&#30721;&#12290;<\/p>\n<h3>&#20160;&#20040;&#26159;&#27169;&#22411;&#20462;&#21098;&#65311;<\/h3>\n<p>&#27169;&#22411;&#20462;&#21098;&#26159;&#25351;&#22312;&#33719;&#21462;&#25968;&#25454;&#24211;&#35760;&#24405;&#26102;&#65292;&#23545;&#36825;&#20123;&#35760;&#24405;&#36827;&#34892;&#39044;&#22788;&#29702;&#65292;&#20197;&#30830;&#20445;&#23427;&#20204;&#31526;&#21512;&#29305;&#23450;&#30340;&#35201;&#27714;&#25110;&#26684;&#24335;&#12290;&#36825;&#21487;&#20197;&#21253;&#25324;&#21435;&#38500;&#31354;&#20540;&#12289;&#26684;&#24335;&#21270;&#26085;&#26399;&#26102;&#38388;&#12289;&#36807;&#28388;&#25935;&#24863;&#20449;&#24687;&#31561;&#12290;<\/p>\n<h3>&#22914;&#20309;&#22312; Eloquent &#20013;&#36827;&#34892;&#27169;&#22411;&#20462;&#21098;<\/h3>\n<ol>\n<li>\n<p><strong>&#23450;&#20041;&#27169;&#22411;&#23383;&#27573;<\/strong>&#65306;&#39318;&#20808;&#65292;&#25105;&#20204;&#38656;&#35201;&#23450;&#20041;&#27169;&#22411;&#20013;&#30340;&#23383;&#27573;&#65292;&#20197;&#20415;&#22312;&#33719;&#21462;&#35760;&#24405;&#26102;&#23545;&#20854;&#36827;&#34892;&#20462;&#21098;&#12290;<\/p>\n<\/li>\n<li>\n<p><strong>&#21019;&#24314;&#27169;&#22411;&#23454;&#20363;<\/strong>&#65306;&#20351;&#29992; <code>find<\/code>&#12289;<code>first<\/code>&#12289;<code>get<\/code> &#31561;&#26041;&#27861;&#20174;&#25968;&#25454;&#24211;&#20013;&#33719;&#21462;&#27169;&#22411;&#23454;&#20363;&#12290;<\/p>\n<\/li>\n<li>\n<p><strong>&#24212;&#29992;&#20462;&#21098;&#35268;&#21017;<\/strong>&#65306;&#22312;&#33719;&#21462;&#21040;&#27169;&#22411;&#23454;&#20363;&#21518;&#65292;&#25105;&#20204;&#21487;&#20197;&#24212;&#29992;&#21508;&#31181;&#20462;&#21098;&#35268;&#21017;&#26469;&#28165;&#29702;&#25968;&#25454;&#12290;<\/p>\n<\/li>\n<\/ol>\n<p>&#20197;&#19979;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;&#31034;&#20363;&#20195;&#30721;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ &#23450;&#20041;&#27169;&#22411;\nnamespace AppModels;\n\nuse IlluminateDatabaseEloquentModel;\n\nclass User extends Model\n{\n    \/\/ &#23450;&#20041;&#34920;&#21517;\n    protected $table = 'users';\n\n    \/\/ &#23450;&#20041;&#20027;&#38190;\n    protected $primaryKey = 'id';\n\n    \/\/ &#23450;&#20041;&#22635;&#20805;&#30340;&#25968;&#25454;\n    protected $fillable = ['name', 'email', 'age'];\n\n    \/\/ &#33258;&#23450;&#20041;&#35775;&#38382;&#22120;&#21644; mutator\n    public function getNameAttribute($value)\n    {\n        return ucfirst($value);\n    }\n\n    public function getEmailAttribute($value)\n    {\n        return strtolower($value);\n    }\n}\n\n\/\/ &#33719;&#21462;&#29992;&#25143;&#25968;&#25454;\n$user = User::find(1);\n\n\/\/ &#24212;&#29992;&#20462;&#21098;&#35268;&#21017;\n$user-&gt;name = trim($user-&gt;name); \/\/ &#21435;&#38500;&#21069;&#21518;&#31354;&#26684;\n$user-&gt;email = strtolower($user-&gt;email); \/\/ &#36716;&#25442;&#20026;&#23567;&#20889;\n$user-&gt;age = (int)$user-&gt;age; \/\/ &#36716;&#25442;&#20026;&#25972;&#25968;\n\n\/\/ &#36755;&#20986;&#20462;&#21098;&#21518;&#30340;&#25968;&#25454;\necho \"Name: \" . $user-&gt;name . \"n\";\necho \"Email: \" . $user-&gt;email . \"n\";\necho \"Age: \" . $user-&gt;age . \"n\";<\/code><\/pre>\n<h3>&#31034;&#20363;&#20195;&#30721;&#35299;&#37322;<\/h3>\n<ol>\n<li>\n<p><strong>&#23450;&#20041;&#27169;&#22411;<\/strong>&#65306;<\/p>\n<ul>\n<li>&#25105;&#20204;&#23450;&#20041;&#20102;&#19968;&#20010;&#21517;&#20026; <code>User<\/code> &#30340;&#27169;&#22411;&#65292;&#24182;&#25351;&#23450;&#20102;&#34920;&#21517;&#21644;&#20027;&#38190;&#12290;<\/li>\n<li>&#20351;&#29992; <code>$fillable<\/code> &#23646;&#24615;&#23450;&#20041;&#20102;&#21487;&#20197;&#34987;&#22635;&#20805;&#30340;&#25968;&#25454;&#23383;&#27573;&#12290;<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>&#33258;&#23450;&#20041;&#35775;&#38382;&#22120;&#21644; mutator<\/strong>&#65306;<\/p>\n<ul>\n<li>&#25105;&#20204;&#23450;&#20041;&#20102; <code>getNameAttribute<\/code> &#21644; <code>getEmailAttribute<\/code> &#35775;&#38382;&#22120;&#21644; mutator&#65292;&#29992;&#20110;&#33258;&#23450;&#20041;&#33719;&#21462;&#21644;&#35774;&#32622;&#23383;&#27573;&#30340;&#20540;&#12290;<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>&#33719;&#21462;&#29992;&#25143;&#25968;&#25454;<\/strong>&#65306;<\/p>\n<ul>\n<li>&#20351;&#29992; <code>find<\/code> &#26041;&#27861;&#20174;&#25968;&#25454;&#24211;&#20013;&#33719;&#21462;&#29992;&#25143;&#25968;&#25454;&#12290;<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>&#24212;&#29992;&#20462;&#21098;&#35268;&#21017;<\/strong>&#65306;<\/p>\n<ul>\n<li>&#25105;&#20204;&#20351;&#29992; <code>trim<\/code> &#20989;&#25968;&#21435;&#38500;&#21069;&#21518;&#30340;&#31354;&#26684;&#65292;<code>strtolower<\/code> &#20989;&#25968;&#23558;&#30005;&#23376;&#37038;&#20214;&#36716;&#25442;&#20026;&#23567;&#20889;&#65292;<code>intval<\/code> &#20989;&#25968;&#23558;&#24180;&#40836;&#36716;&#25442;&#20026;&#25972;&#25968;&#12290;<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>&#36890;&#36807;&#36825;&#31181;&#26041;&#24335;&#65292;&#20320;&#21487;&#20197;&#36731;&#26494;&#22320;&#22312; Eloquent &#20013;&#36827;&#34892;&#27169;&#22411;&#20462;&#21098;&#65292;&#30830;&#20445;&#25968;&#25454;&#24211;&#35760;&#24405;&#31526;&#21512;&#39044;&#26399;&#30340;&#35201;&#27714;&#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>Eloquent ORM &#26159;&#19968;&#20010;&#24378;&#22823;&#30340;&#39640;&#32423;&#25968;&#25454;&#24211;&#24037;&#20855;&#65292;&#19987;&#20026; Laravel &#35774;&#35745;&#65292;&#20351;&#24471;&#24320;&#21457;&#32773;&#33021;&#22815;&#20197;&#26368;&#23567;&#30340;&#21162;&#21147;&#25191;&#34892;&#22797;&#26434;&#30340;&#25968;&#25454;&#24211;&#25805;&#20316;&#12290;&#22312;&#36825;&#31687;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#23558;&#20171;&#32461;&#22914;&#20309;&#20462;&#21098;&#25110;&#28165;&#29702; Eloquent &#27169;&#22411;&#12290;&#36825;&#19968;&#21151;&#33021;&#22312;&#24744;&#24076;&#26395;&#32500;&#25252;&#31616;&#27905;&#19988;&#39640;&#25928;&#30340;&#34920;&#26102;&#29305;&#21035;&#26377;&#29992;&#65292;&#36890;&#36807;&#28165;&#38500;&#36807;&#26102;&#25110;&#19981;&#30456;&#20851;&#30340;&#35760;&#24405;&#26469;&#23454;&#29616;&#36825;&#19968;&#28857;&#12290;<\/p><p>&#22312;&#24320;&#22987;&#20043;&#21069;&#65292;&#35831;&#30830;&#20445;&#24744;&#24050;&#32463;&#35774;&#32622;&#24182;&#20934;&#22791;&#22909;Laravel&#29615;&#22659;&#12290;&#36824;&#38656;&#35201;&#22312;&#24744;&#30340;.env&#25991;&#20214;&#20013;&#37197;&#32622;&#25968;&#25454;&#24211;&#36830;&#25509;&#65292;&#20197;&#20415;Eloquent&#33021;&#22815;&#19982;&#25968;&#25454;&#24211;&#20132;&#20114;&#12290;<\/p><h2>&#27169;&#22411;&#21098;&#26525;&#65288;Model Pruning&#65289;<\/h2><p>&#20462;&#21098;Eloquent&#27169;&#22411;&#21487;&#20197;&#24110;&#21161;&#20943;&#23569;&#25968;&#25454;&#24211;&#30340;&#22823;&#23567;&#65292;&#22240;&#20026;&#21024;&#38500;&#19981;&#20877;&#38656;&#35201;&#30340;&#35760;&#24405;&#21487;&#20197;&#36825;&#26679;&#20570;&#12290;Laravel &#30340;&#26368;&#26032;&#29256;&#26412;&#20801;&#35768;&#36890;&#36807; Eloquent &#30452;&#25509;&#36827;&#34892;&#23450;&#26399;&#28165;&#29702;&#25805;&#20316;&#65292;&#20294;&#26159;&#25163;&#21160;&#20462;&#21098;&#20063;&#26159;&#21487;&#33021;&#30340;&#12290;<\/p><p>&#25105;&#20204;&#23558;&#39318;&#20808;&#28085;&#30422;&#33258;&#21160;&#25509;&#36817;&#65292;&#28982;&#21518;&#28145;&#20837;&#25506;&#35752;&#22312;&#38656;&#35201;&#26102;&#25163;&#21160;&#35843;&#29992;&#20462;&#21098;&#36807;&#31243;&#30340;&#26041;&#27861;&#12290;<\/p><h3>&#33258;&#21160;&#21098;&#26525;<\/h3><p>&#20026;&#20102;&#33258;&#21160;&#20462;&#21098;&#27169;&#22411;&#65292;&#24744;&#38656;&#35201;&#20351;&#29992;Laravel&#30340;&#35843;&#24230;&#21151;&#33021;&#12290;&#36825;&#22312;&#20195;&#30721;&#20013;&#36827;&#34892;&#25805;&#20316;&#65306;<code>app\/Console\/Kernel.php<\/code>&#25991;&#20214;&#12290;<\/p><pre><code>use AppModelsYourEloquentModel;\n\nprotected function schedule(Schedule $schedule)\n{\n    $schedule-&gt;command('model:prune', [\n        '--model' =&gt; [YourEloquentModel::class],\n    ])-&gt;daily();\n}\n<\/code><\/pre><p>&#22312;&#19978;&#36848;&#20363;&#23376;&#20013;&#65292;&#26367;&#25442;<code>YourEloquentModel<\/code>&#20197;&#24744;&#24076;&#26395;&#21098;&#26525;&#30340;&#23454;&#38469;&#27169;&#22411;&#31867;&#20026;&#20363;&#12290;<code>--model<\/code>&#35813;&#36873;&#39033;&#25351;&#23450;&#20102;&#22312;&#21098;&#26525;&#36807;&#31243;&#20013;&#21253;&#21547;&#21738;&#20123;&#27169;&#22411;&#65292;&#25105;&#20204;&#24050;&#23433;&#25490;&#27492;&#21629;&#20196;&#27599;&#22825;&#36816;&#34892;&#12290;<\/p><h3>&#23454;&#26045;&#21487;&#20462;&#21098;&#30340;&#29305;&#36136;<\/h3><p>&#23545;&#20110;&#27169;&#22411;&#26469;&#35828;&#65292;&#35201;&#34987;&#21098;&#26525;&#65288;pruning&#65289;&#22788;&#29702;&#65292;&#23427;&#38656;&#35201;&#20351;&#29992;&#26576;&#31181;&#26041;&#27861;&#12290;<code>IlluminateDatabaseEloquentPrunable<\/code>&#25265;&#27465;&#65292;&#25105;&#26080;&#27861;&#29702;&#35299;&#24744;&#30340;&#38382;&#39064;&#25110;&#25351;&#20196;&#65292;&#35831;&#25552;&#20379;&#26356;&#22810;&#30340;&#20449;&#24687;&#25110;&#19978;&#19979;&#25991;&#20197;&#20415;&#20110;&#25105;&#26356;&#22909;&#30340;&#24110;&#21161;&#24744;&#12290;<code>prunable()<\/code>&#23450;&#20041;&#21098;&#26525;&#36923;&#36753;&#30340;&#26041;&#27861;&#65306;<\/p><pre><code>use IlluminateDatabaseEloquentPrunable;\n\nclass YourEloquentModel extends Model\n{\n    use Prunable;\n\n    public function prunable()\n    {\n        return static::where('created_at', '&lt;=', now()-&gt;subYear());\n    }\n}\n<\/code><\/pre><p>&#36825;&#20010;&#20363;&#23376;&#23450;&#20041;&#20102;&#19968;&#20010;&#21487;&#20462;&#21098;&#30340;&#26041;&#27861;&#65292;&#35813;&#26041;&#27861;&#23558;&#26597;&#35810;&#38480;&#21046;&#22312;&#36229;&#36807;&#19968;&#24180;&#21069;&#21019;&#24314;&#30340;&#35760;&#24405;&#19978;&#12290;&#36825;&#20123;&#35760;&#24405;&#23558;&#25104;&#20026;&#21487;&#20462;&#21098;&#30340;&#35760;&#24405;&#12290;<\/p><h3>&#39640;&#32423;&#20462;&#21098;&#26465;&#20214;<\/h3><p>&#20462;&#21098;&#26465;&#20214;&#19981;&#38480;&#20110;&#26085;&#26399;&#65307;&#20320;&#21487;&#20197;&#20351;&#29992;Eloquent&#36890;&#24120;&#20351;&#29992;&#30340;&#20219;&#20309;&#26465;&#20214;&#12290;<\/p><pre><code>public function prunable()\n{\n    return static::where('status', 'archived')-&gt;orWhere('views', '&lt;', 100);\n}\n<\/code><\/pre><p>&#27880;&#24847;&#65292;&#20462;&#21098;&#26465;&#20214;&#26102;&#35201;&#23567;&#24515;&#12290;&#19968;&#26086;&#35760;&#24405;&#34987;&#20462;&#21098;&#65292;&#23427;&#20204;&#23601;&#20250;&#27704;&#20037;&#20174;&#25968;&#25454;&#24211;&#20013;&#21024;&#38500;&#12290;<\/p><h3>&#25163;&#21160;&#20462;&#21098;&#26641;&#26525;<\/h3><p>&#22914;&#26524;&#20320;&#38656;&#35201;&#25163;&#21160;&#35302;&#21457;&#20462;&#21098;&#36807;&#31243;&#25110;&#36890;&#36807;&#36335;&#30001;\/&#25511;&#21046;&#22120;&#26469;&#35302;&#21457;&#65292;&#20320;&#21487;&#20197;&#35843;&#29992;<code>prune<\/code>&#35831;&#22312;&#24744;&#30340;&#27169;&#22411;&#19978;&#30452;&#25509;&#24212;&#29992;&#26041;&#27861;&#65306;<\/p><pre><code>$prunedRecordsCount = YourEloquentModel::prune();\n<\/code><\/pre><p>&#36825;&#23558;&#26681;&#25454;&#24744;&#23450;&#20041;&#30340;&#36923;&#36753;&#25191;&#34892;&#21098;&#26525;&#25805;&#20316;&#12290;<code>prunable<\/code>&#26041;&#27861;&#36820;&#22238;&#21463;&#24433;&#21709;&#30340;&#35760;&#24405;&#25968;&#12290;<\/p><h2>&#39640;&#32423;&#29992;&#27861;<\/h2><p>&#35753;&#25105;&#20204;&#25506;&#35752;&#19968;&#20123;&#22788;&#29702;&#22823;&#22411;&#25968;&#25454;&#38598;&#25110;&#24076;&#26395;&#26377;&#26356;&#22810;&#25511;&#21046;&#26435;&#36827;&#34892;&#21098;&#26525;&#25805;&#20316;&#26102;&#38656;&#35201;&#30340;&#19968;&#20123;&#39640;&#32423;&#23454;&#36341;&#12290;<\/p><h3>&#35206;&#30422;&#40664;&#35748;&#20462;&#21098;&#34892;&#20026;<\/h3><p>&#26377;&#26102;&#65292;&#24744;&#21487;&#33021;&#24076;&#26395;&#26356;&#25913;&#21098;&#26525;&#25805;&#20316;&#30340;&#40664;&#35748;&#34892;&#20026;&#12290;&#20363;&#22914;&#65292;&#20026;&#20102;&#21253;&#25324;&#36719;&#21024;&#38500;&#32780;&#19981;&#26159;&#27704;&#20037;&#24615;&#22320;&#21024;&#38500;&#35760;&#24405;&#65306;<\/p><pre><code>public function prunable()\n{\n    return static::onlyTrashed()-&gt;where('deleted_at', '&lt;', now()-&gt;subMonth());\n}\n<\/code><\/pre><p>&#35813;&#20195;&#30721;&#21482;&#20250;&#21024;&#38500;&#36229;&#36807;&#19968;&#20010;&#26376;&#30340;&#36719;&#21024;&#38500;&#35760;&#24405;&#65292;&#20551;&#35774;&#24744;&#30340;&#27169;&#22411;&#20063;&#22312;&#20351;&#29992;&#12290;<code>SoftDeletes<\/code>&#25265;&#27465;&#65292;&#25105;&#19981;&#22826;&#26126;&#30333;&#20320;&#30340;&#24847;&#24605;&#12290;<\/p><h3>&#19982;&#22797;&#26434;&#26631;&#20934;&#30340;&#25490;&#31243;<\/h3><p>&#22914;&#26524;&#24744;&#26377;&#22797;&#26434;&#30340;&#20462;&#21098;&#35201;&#27714;&#65292;&#28041;&#21450;&#20851;&#31995;&#65292;&#35831;&#25193;&#23637;&#31995;&#32479;&#20197;&#20351;&#29992;&#33258;&#23450;&#20041;&#21629;&#20196;&#65306;<\/p><pre><code>&lt;?php\n\nnamespace AppConsoleCommands;\n\nuse IlluminateConsoleCommand;\nuse AppModelsUser;\n\nclass PruneInactiveUsers extends Command\n{\n    \/**\n     * The name and signature of the console command.\n     *\n     * @var string\n     *\/\n    protected $signature = 'users:prune-inactive';\n\n    \/**\n     * The console command description.\n     *\n     * @var string\n     *\/\n    protected $description = 'Prune inactive user accounts.';\n\n    public function handle()\n    {\n        User::whereDoesntHave('logins', function ($query) {\n            $query-&gt;where('created_at', '&gt;', now()-&gt;subYear());\n        })-&gt;prune();\n\n        $this-&gt;info('Inactive users pruned successfully.');\n    }\n}\n<\/code><\/pre><p>&#19978;&#36848;&#21629;&#20196;&#20250;&#20462;&#21098;&#36229;&#36807;&#19968;&#24180;&#27809;&#26377;&#30331;&#24405;&#30340;&#29992;&#25143;&#12290;&#30830;&#20445;&#22312;&#27880;&#20876;&#26032;&#21629;&#20196;&#26102;&#65292;&#23558;&#20854;&#35760;&#24405;&#19979;&#26469;&#12290;<code>app\/Console\/Kernel.php<\/code>&#25991;&#20214;&#65306;<\/p><pre><code>protected $commands = [\n    CommandsPruneInactiveUsers::class,\n];\n<\/code><\/pre><h3>&#20107;&#20214;&#21644;&#35266;&#23519;&#32773;<\/h3><p>&#22312;&#20462;&#21098;&#25805;&#20316;&#26102;&#65292;&#26377;&#26102;&#21487;&#33021;&#38656;&#35201;&#25191;&#34892;&#39069;&#22806;&#30340;&#28165;&#29702;&#20219;&#21153;&#12290;Laravel &#25552;&#20379;&#20102;&#20107;&#20214;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#23454;&#29616;&#35266;&#23519;&#32773;&#26469;&#21033;&#29992;&#36825;&#20123;&#21151;&#33021;&#12290;&#20197;&#19979;&#26159;&#22914;&#20309;&#30417;&#21548;&#20462;&#21098;&#20107;&#20214;&#30340;&#26041;&#27861;&#65306;<\/p><pre><code>YourEloquentModel::observe(YourObserver::class);\n<\/code><\/pre><p>&#22312;&#20320;&#30340;&#35266;&#23519;&#32773;&#20869;&#37096;&#65292;&#20320;&#21487;&#20197;&#23450;&#20041;&#19968;&#20010;&#26041;&#27861;&#12290;<code>pruning<\/code>&#37027;&#23558;&#22312;&#35760;&#24405;&#34987;&#21024;&#38500;&#20043;&#21069;&#36827;&#34892;&#12290;<code>pruned<\/code>&#23545;&#20110;&#20043;&#21518;&#65306;<\/p><pre><code>public function pruning($model)\n{\n    \/\/ Code to execute before each model is pruned\n}\n\npublic function pruned($model)\n{\n    \/\/ Code to execute after each model is pruned\n}\n<\/code><\/pre><p>&#35831;&#35760;&#20303;&#65292;&#36825;&#20123;&#35266;&#23519;&#32773;&#23558;&#22312;&#27169;&#22411;&#23454;&#20363;&#32423;&#21035;&#24037;&#20316;&#65292;&#22240;&#27492;&#22914;&#26524;&#35201;&#21098;&#26525;&#22823;&#37327;&#35760;&#24405;&#65292;&#32771;&#34385;&#28508;&#22312;&#30340;&#24615;&#33021;&#24433;&#21709;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>&#26412;&#25945;&#31243;&#24050;&#32463;&#24102;&#20320; walkthrough &#20102;&#22914;&#20309;&#20026;&#20320;&#30340; Eloquent &#27169;&#22411;&#35774;&#32622;&#20462;&#21098;&#65292;&#20174;&#31616;&#21333;&#30340;&#26085;&#26399;&#26465;&#20214;&#21040;&#21253;&#21547;&#20851;&#31995;&#21644;&#33258;&#23450;&#20041;&#21629;&#20196;&#30340;&#22797;&#26434;&#26465;&#20214;&#12290;&#20462;&#21098;&#21487;&#20197;&#25552;&#39640;&#24212;&#29992;&#24615;&#33021;&#65292;&#36890;&#36807;&#20445;&#25345;&#34920;&#20248;&#21270;&#24182;&#31227;&#38500;&#26434;&#39033;&#26469;&#21435;&#38500;&#22403;&#22334;&#25968;&#25454;&#12290;&#23427;&#26159;&#39640;&#25928;&#31649;&#29702;&#22823;&#22411;&#21160;&#24577;&#25968;&#25454;&#38598;&#30340;&#20851;&#38190;&#25216;&#26415;&#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;Eloquent&#26694;&#26550;&#20013;&#65292;&#20462;&#21098;&#65288;Trimming&#65289;&#26159;&#23558;&#25968;&#25454;&#38598;&#20013;&#30340;&#26576;&#20123;&#29305;&#23450;&#20540;&#21024;&#38500;&#30340;&#36807;&#31243;&#12290;&#36825;&#36890;&#24120;&#29992;&#20110;&#31227;&#38500;&#26080;&#25928;&#30340;&#25968;&#25454;&#34892;&#25110;&#32773;&#26681;&#25454;&#19994;&#21153;&#38656;&#27714;&#23545;&#25968;&#25454;&#36827;&#34892;&#28165;&#29702;&#12290;<\/p>\n<h3>&#21098;&#26525;&#30340;&#21407;&#29702;<\/h3>\n<p>&#21098;&#26525;&#26159;&#19968;&#31181;&#25968;&#25454;&#39044;&#22788;&#29702;&#25216;&#26415;&#65292;&#23427;&#36890;&#36807;&#31579;&#36873;&#20986;&#28385;&#36275;&#29305;&#23450;&#26465;&#20214;&#30340;&#25968;&#25454;&#26469;&#20943;&#23569;&#25968;&#25454;&#24211;&#26597;&#35810;&#30340;&#25968;&#37327;&#21644;&#35745;&#31639;&#26102;&#38388;&#12290;&#22312;Eloquent&#20013;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;<code>whereHas()<\/code>&#26041;&#27861;&#26469;&#23454;&#29616;&#36825;&#20010;&#30446;&#30340;&#12290;<\/p>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#29992;&#25143;&#34920;&#65292;&#25105;&#20204;&#38656;&#35201;&#20174;&#29992;&#25143;&#34920;&#20013;&#21024;&#38500;&#25152;&#26377;&#27809;&#26377;&#30005;&#23376;&#37038;&#20214;&#22320;&#22336;&#30340;&#29992;&#25143;&#12290;&#25105;&#20204;&#21487;&#20197;&#36825;&#26679;&#25805;&#20316;&#65306;<\/p>\n<pre><code class=\"language-php\">use IlluminateSupportFacadesDB;\n\nclass User extends Model {\n    public function email() {\n        return $this-&gt;hasOne('AppModelsUser', 'email');\n    }\n}\n\n\/\/ &#22312;&#38656;&#35201;&#21098;&#26525;&#30340;&#22320;&#26041;&#35843;&#29992;\n$users = User::all();\n$nonEmailUsers = $users-&gt;whereHas('email')-&gt;get();\n\nforeach ($nonEmailUsers as $user) {\n    \/\/ &#30830;&#20445;&#29992;&#25143;&#26377;&#26377;&#25928;&#30340;&#30005;&#23376;&#37038;&#20214;&#22320;&#22336;\n    if (!isset($user-&gt;email)) {\n        DB::table('users')\n            -&gt;where('id', $user-&gt;id)\n            -&gt;update(['email' =&gt; null]);\n    }\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;<code>User<\/code>&#31867;&#30340;&#19968;&#20010;&#23646;&#24615;<code>email<\/code>&#34987;&#35774;&#32622;&#20026;<code>hasOne<\/code>&#20851;&#32852;&#20851;&#31995;&#65292;&#36825;&#24847;&#21619;&#30528;&#24403;<code>User<\/code>&#23545;&#35937;&#23384;&#22312;&#26102;&#65292;&#23427;&#24517;&#39035;&#33267;&#23569;&#26377;&#19968;&#20010;&#23545;&#24212;&#30340;<code>Email<\/code>&#23545;&#35937;&#12290;&#28982;&#21518;&#25105;&#20204;&#20351;&#29992;<code>whereHas<\/code>&#26041;&#27861;&#36807;&#28388;&#20986;&#37027;&#20123;&#27809;&#26377;<code>email<\/code>&#30340;<code>User<\/code>&#23545;&#35937;&#65292;&#24182;&#33719;&#21462;&#23427;&#20204;&#30340;ID&#12290;<\/p>\n<p>&#25509;&#19979;&#26469;&#65292;&#25105;&#20204;&#36941;&#21382;&#36825;&#20123;&#26410;&#22635;&#20805;&#30340;<code>email<\/code>&#23383;&#27573;&#30340;<code>User<\/code>&#23545;&#35937;&#65292;&#24182;&#26356;&#26032;<code>email<\/code>&#23383;&#27573;&#20026;&#31354;&#65292;&#30830;&#20445;&#23427;&#20204;&#20855;&#26377;&#26377;&#25928;&#30340;&#30005;&#23376;&#37038;&#20214;&#22320;&#22336;&#12290;<\/p>\n<h3>&#27880;&#24847;&#20107;&#39033;<\/h3>\n<ul>\n<li>&#35831;&#30830;&#20445;&#22312;&#25554;&#20837;&#25968;&#25454;&#21069;&#26816;&#26597;<code>email<\/code>&#23383;&#27573;&#26159;&#21542;&#24050;&#35774;&#32622;&#12290;<\/li>\n<li><code>whereHas<\/code>&#26041;&#27861;&#36820;&#22238;&#30340;&#26159;&#19968;&#20010;&#25968;&#32452;&#65292;&#20854;&#20013;&#21253;&#21547;&#20102;&#21305;&#37197;&#30340;&#35760;&#24405;&#21644;&#19981;&#21305;&#37197;&#30340;&#35760;&#24405;&#12290;&#20320;&#21487;&#20197;&#36873;&#25321;&#36820;&#22238;&#21305;&#37197;&#30340;&#35760;&#24405;&#25110;&#25152;&#26377;&#30340;&#35760;&#24405;&#12290;<\/li>\n<li>&#22914;&#26524;&#20320;&#30340;&#25968;&#25454;&#24211;&#34920;&#32467;&#26500;&#20801;&#35768;&#65292;&#20320;&#20063;&#21487;&#20197;&#30452;&#25509;&#20351;&#29992;<code>-&gt;orWhereHas('email')<\/code>&#32780;&#19981;&#26159;<code>-&gt;whereHas('email')<\/code>&#12290;<\/li>\n<\/ul>\n<p>&#20197;&#19978;&#23601;&#26159;&#22914;&#20309;&#22312;Eloquent&#20013;&#20351;&#29992;<code>whereHas<\/code>&#26469;&#20462;&#21098;&#25968;&#25454;&#30340;&#19968;&#33324;&#26041;&#24335;&#12290;&#24076;&#26395;&#36825;&#23545;&#24744;&#26377;&#25152;&#24110;&#21161;&#65281;<\/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;&#22312;Eloquent&#20013;&#20462;&#21098;&#27169;&#22411;&#65306;&#25945;&#31243;&#19982;&#31034;&#20363; &#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-973","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\/973","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=973"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=973"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=973"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=973"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}