首頁 >資料庫 >mysql教程 >Bangla 部分剪枝模型中的 Laravel Eloquent ORM)

Bangla 部分剪枝模型中的 Laravel Eloquent ORM)

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-16 20:18:11949瀏覽

Laravel Eloquent ORM in Bangla Part-Pruning Models)

Laravel Eloquent 的模型修剪功能可讓您自動刪除資料庫中過時或不需要的記錄。這有助於提升大型資料庫的效能,並防止不必要的資料累積。在 Laravel 中,您可以透過排程任務或 Artisan 指令來執行修剪操作。

主要方法:

1. 舊模型修剪 (刪除舊記錄)

當需要在特定時間後刪除舊記錄時,可以使用此方法。例如,如果您希望在帖子創建 30 天後自動刪除該帖子,則可以使用修剪功能。

使用 prune() 方法:

Laravel Eloquent 8.x 版本引進了 prune() 方法。此方法專門用於根據特定條件刪除記錄。

<code class="language-php">use App\Models\Post;

class Post extends Model
{
    protected static function booted()
    {
        static::pruning(function ($query) {
            // 删除 30 天前创建的帖子
            $query->where('created_at', '<', now()->subDays(30));
        });
    }
}</code>

每次執行 Post::prune() 時,它都會刪除 30 天前的貼文。

2. 使用排程任務進行修剪

您可以使用 Laravel 的任務排程功能,在特定時間內定期刪除舊資料。

建立排程任務:

  1. 開啟 app/Console/Kernel.php 文件,並在 schedule() 方法中加入您的修剪任務。
<code class="language-php">use App\Models\Post;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    protected function schedule(Schedule $schedule)
    {
        // 每天凌晨 1 点修剪旧帖子
        $schedule->call(function () {
            Post::where('created_at', '<', now()->subDays(30))->delete();
        })->dailyAt('01:00');
    }
}</code>

這將每天凌晨 1 點刪除 30 天前的貼文。

3. 使用 Artisan 指令進行修剪

您也可以使用 Artisan 指令手動執行修剪操作。透過建立新的 Laravel Artisan 指令來刪除資料。

建立自訂 Artisan 指令:

  1. 建立指令:
<code class="language-bash">php artisan make:command PruneOldPosts</code>
  1. app/Console/Commands/PruneOldPosts.php 檔案中建立自訂指令:
<code class="language-php">namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Models\Post;

class PruneOldPosts extends Command
{
    protected $signature = 'posts:prune-old';
    protected $description = 'Prune posts older than 30 days';

    public function handle()
    {
        // 删除 30 天前创建的帖子
        Post::where('created_at', '<', now()->subDays(30))->delete();

        $this->info('Old posts pruned successfully!');
    }
}</code>
  1. 運行指令:
<code class="language-bash">php artisan posts:prune-old</code>

這將手動運行並刪除 30 天前的帖子。

4. 軟體刪除與修剪

有時您可能希望使用軟刪除,即不完全刪除記錄,而只是將其標記為「已刪除」。在這種情況下,您可以結合軟刪除和修剪功能。

<code class="language-php">use App\Models\Post;

class Post extends Model
{
    use SoftDeletes;

    protected static function booted()
    {
        static::pruning(function ($query) {
            // 修剪 30 天前软删除的帖子
            $query->where('deleted_at', '<', now()->subDays(30));
        });
    }
}</code>

這將刪除 30 天前軟刪除的貼文。

5. 修剪與 Eloquent 關係

當您想要刪除與記錄相關的記錄時,您需要同時刪除這些關係。例如,如果您希望在刪除貼文時也刪除其相關的評論,則可以使用級聯刪除。

<code class="language-php">class Post extends Model
{
    use SoftDeletes;

    public function comments()
    {
        return $this->hasMany(Comment::class);
    }

    protected static function booted()
    {
        static::deleting(function ($post) {
            // 删除帖子时删除所有评论
            $post->comments()->delete();
        });
    }
}</code>

這將確保刪除貼文時也會刪除其相關的評論。

以上是Bangla 部分剪枝模型中的 Laravel Eloquent ORM)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn