ホームページ > データベース > mysql チュートリアル > Laravel Eloquent ORM in Bangla Part-Pruning Model)

Laravel Eloquent ORM in Bangla Part-Pruning Model)

Mary-Kate Olsen
リリース: 2025-01-16 20:18:11
オリジナル
943 人が閲覧しました

Laravel Eloquent ORM in Bangla Part-Pruning Models)

Laravel Eloquent のモデルプルーニング機能を使用すると、データベース内の古いレコードや不要なレコードを自動的に削除できます。これは、大規模なデータベースのパフォーマンスを向上させ、不必要なデータの蓄積を防ぐのに役立ちます。 Laravel では、スケジュールされたタスクまたはアーティザン コマンドを通じてプルーニング操作を実行できます。

メインメソッド:

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. アーティザン コマンドを使用して

をトリミングします

アーティザン コマンドを使用してトリミング操作を手動で実行することもできます。新しい Laravel 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. 剪定と雄弁な関係

レコードに関連するレコードを削除する場合は、それらの関係も同時に削除する必要があります。たとえば、投稿が削除されたときに、それに関連付けられているコメントも削除したい場合は、カスケード削除を使用できます。

<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>
ログイン後にコピー

これにより、投稿が削除されると、それに関連付けられたコメントも確実に削除されます。

以上がLaravel Eloquent ORM in Bangla Part-Pruning Model)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート