ホームページ  >  記事  >  PHPフレームワーク  >  1つの記事でlaravelモデルの削除とソフト削除について学びます

1つの記事でlaravelモデルの削除とソフト削除について学びます

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼転載
2019-11-20 17:06:524279ブラウズ

1つの記事でlaravelモデルの削除とソフト削除について学びます

##1. モデルを削除します

#1.1 delete を使用してモデルを削除します

##モデルの削除は非常に簡単です。まず、削除するモデル インスタンスを取得し、次に delete メソッドを呼び出します:

$post = Post::find(5);
if($post->delete()){
    echo '删除文章成功!';
}else{
    echo '删除文章失败!';
}

メソッドは true または false を返します。

1.2 destroy を使用してモデルを削除する

もちろん、削除するモデル ID がわかっている場合は、より簡単なメソッド destroy を使用して直接削除できます。

$deleted = Post::destroy(5);

複数のモデル ID を一度に渡すことで、複数のモデルを削除することもできます。

$deleted = Post::destroy([1,2,3,4,5]);

destroy メソッドを呼び出して、削除されたレコードの数を返します。

1.3 クエリ ビルダーを使用してモデルを削除する

Eloquent モデル自体がクエリ ビルダーであることは前述したように、クエリ ビルダーを削除することもできます。クエリ ビルダー スタイルを使用したモデル。たとえば、ビューが 0 の記事をすべて削除したい場合は、次のメソッドを使用できます。

$deleted = Models\Post::where('views', 0)->delete();

戻り結果は、削除された記事の数です。

2. ソフト削除の実装

上記の削除メソッドは、データベースからデータ テーブル レコードを削除します。さらに、Eloquent モデルもソフト削除をサポートします。

いわゆるソフト削除とは、データ テーブルのレコードが実際にはデータベースから削除されないことを意味しますが、テーブル レコードの識別ステータスはソフト削除としてマークされ、クエリ時にフィルタリングできるようになります。対応するテーブルのレコードが「削除」されたようです。 Laravel は識別ステータスとして日付フィールドを使用します。この日付フィールドはカスタマイズできます。ここでは、deleted_at を使用します。対応するモデルが論理的に削除されている場合、deleted_at フィールドの値は削除時刻です。それ以外の場合、値は空です。

Eloquent モデルでソフト削除をサポートするには、いくつかの設定を行う必要があります。まず、モデル クラスで SoftDeletestrait を使用します。このトレイトは、ソフト削除に関連する一連のメソッドを提供します。詳細については、ソース コード Illuminate\Database\Eloquent\SoftDeletes を参照してください。さらに、$date 属性配列とその中にdeleted_atを入れます:

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Post extends Model
{
    use SoftDeletes;
    //设置表名
    public $table = &#39;posts&#39;;
    //设置主键
    public $primaryKey = &#39;id&#39;;
    //设置日期时间格式
    public $dateFormat = &#39;U&#39;;
    protected $guarded = [&#39;id&#39;,&#39;views&#39;,&#39;user_id&#39;,&#39;updated_at&#39;,&#39;created_at&#39;];
    protected $dates = [&#39;delete_at&#39;];
}

次に、対応するデータベースポストにdeleted_at列を追加します。これを実装するには移行を使用します。最初にArtisanコマンドを実行します:

php artisan make:migration alter_posts_deleted_at --table=posts

次に、生成されたPHP ファイルを次のように記述します:

<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AlterPostsDeletedAt extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table(&#39;posts&#39;, function (Blueprint $table) {
            $table->softDeletes();
        });
    }
    ...//其它方法
}

次に、実行します:

php artisan migrate

したがって、投稿には [deleted_at] 列が存在します。次に、コントローラーにテスト コードを記述します。

$post = Post::find(6);
$post->delete();
if($post->trashed()){
    echo &#39;软删除成功!&#39;;
    dd($post);
}else{
    echo &#39;软删除失败!&#39;;
}

クエリ結果に論理的に削除されたレコードを含めたい場合はどうすればよいでしょうか? SoftDeletes トレイトで withTrashed メソッドを使用できます:

$posts = Post::withTrashed()->get();
dd($posts);

場合によっては、論理的に削除されたモデルのみを表示したい場合があります。SoftDeletes のonlyTrashed メソッドを使用するトリックもあります:

$posts = Post::onlyTrashed()->get();
dd($posts);

論理的削除による回復

論理的に削除されたモデルを復元する必要がある場合があります。SoftDeletes が提供する復元方法を使用できます:

単一のモデルを復元しますモデル

$post = Post::find(6);
$post->restore();
に問題があります。ID 6 のモデルは論理的に削除されました。Post::find(6) はデータを見つけることができません。

should

$post = Post::withTrashed()->find(6);
$post->restore();

複数のモデルを復元します

Post::withTrashed()->where(&#39;id&#39;,&#39;>&#39;,1)->restore();
すべてのモデルを復元します

Post::withTrashed()->restore();
関連するクエリ モデルを復元します

$post = Post::find(6);
$post->history()->restore();

強制削除

##モデルが論理的な削除で構成されているが、そのモデルに対応するデータベース テーブル レコードを実際に削除したい場合は、 SoftDeletes が提供する ForceDelete メソッドを使用できます。

$post = Post::find(6);
$post->forceDelete();
PHP 中国語 Web サイト、無料の

laravel 入門チュートリアル

が多数あり、オンラインで学習することを歓迎します。

この記事は、https://blog.csdn.net/weixin_38112233/article/details/78574007 から転載されました。

以上が1つの記事でlaravelモデルの削除とソフト削除について学びますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。