Heim  >  Artikel  >  PHP-Framework  >  Erfahren Sie in einem Artikel mehr über das Löschen von Laravel-Modellen und das weiche Löschen

Erfahren Sie in einem Artikel mehr über das Löschen von Laravel-Modellen und das weiche Löschen

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼nach vorne
2019-11-20 17:06:524299Durchsuche

Erfahren Sie in einem Artikel mehr über das Löschen von Laravel-Modellen und das weiche Löschen

1. Modell löschen

1.1 Verwenden Sie „Löschen“, um ein Modell zu löschen

Das Löschen eines Modells ist sehr einfach. Rufen Sie zuerst die zu löschende Modellinstanz ab und rufen Sie dann die Löschmethode auf:

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

Die Methode gibt wahr oder falsch zurück.

1.2 Verwenden Sie destroy, um ein Modell zu löschen

Wenn die zu löschende Modell-ID bekannt ist, können Sie sie natürlich auch mit der einfacheren Methode destroy direkt löschen:

$deleted = Post::destroy(5);

Sie können auch mehrere Modelle löschen, indem Sie mehrere Modell-IDs gleichzeitig übergeben:

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

Rufen Sie die Methode destroy auf, um die Anzahl der gelöschten Datensätze zurückzugeben.

1.3 Löschen eines Modells mit dem Abfrage-Builder

Da bereits erwähnt wurde, dass das Eloquent-Modell selbst ein Abfrage-Builder ist, können Sie das Modell auch löschen Verwenden des Abfrage-Builder-Stils. Wenn wir beispielsweise alle Artikel mit 0 Ansichten löschen möchten, können wir die folgende Methode verwenden:

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

Das zurückgegebene Ergebnis ist die Anzahl der gelöschten Artikel.

2. Soft-Deletion-Implementierung

Die oben genannten Löschmethoden löschen auch die Datentabellendatensätze aus der Datenbank unterstützt weiches Löschen.

Das sogenannte Soft-Deletion bedeutet, dass die Datentabellendatensätze nicht tatsächlich aus der Datenbank gelöscht werden, sondern der Identifikationsstatus der Tabellendatensätze als Soft-Deletion markiert wird, sodass er bei der Abfrage gefiltert werden kann dass die entsprechenden Tabellendatensätze anscheinend „gelöscht“ wurden. Laravel verwendet ein Datumsfeld als Identifikationsstatus. Dieses Datumsfeld kann angepasst werden. Wenn das entsprechende Modell vorläufig gelöscht ist, ist der Wert des Feldes delete_at die Löschzeit.

Damit das Eloquent-Modell das sanfte Löschen unterstützt, müssen einige Einstellungen vorgenommen werden. Verwenden Sie zunächst SoftDeletestrait in der Modellklasse. Weitere Informationen finden Sie im Quellcode IlluminateDatabaseEloquentSoftDeletes. Außerdem müssen Sie das Attributarray $date festlegen:

<?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;];
}

Fügen Sie dann die Spalte „deleded_at“ zu den entsprechenden Datenbankbeiträgen hinzu. Dazu führen wir zunächst den Artisan-Befehl aus:

php artisan make:migration alter_posts_deleted_at --table=posts

und bearbeiten dann die generierte PHP-Datei wie folgt:

<?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();
        });
    }
    ...//其它方法
}

und führen Sie dann Folgendes aus:

php artisan migrate

Auf diese Weise wird in den Beiträgen die Spalte „deled_at“ angezeigt. Als nächstes schreiben wir den Testcode in den Controller:

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

Was ist, wenn wir vorläufig gelöschte Datensätze in die Abfrageergebnisse einschließen möchten? Sie können die withTrashed-Methode für das SoftDeletes-Merkmal verwenden:

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

Manchmal möchten wir nur das vorläufig gelöschte Modell anzeigen. Es gibt auch einen Trick über die onlyTrashed-Methode für SoftDeletes:

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

Soft-Deletion-Wiederherstellung

Manchmal müssen wir ein vorläufig gelöschtes Modell wiederherstellen. Sie können die von SoftDeletes bereitgestellte Wiederherstellungsmethode verwenden:

Ein einzelnes wiederherstellen. Mit dem Modell stimmt etwas nicht

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

Das Modell mit der ID 6 wurde vorläufig gelöscht.

sollte

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

Mehrere Modelle wiederherstellen

Post::withTrashed()->where(&#39;id&#39;,&#39;>&#39;,1)->restore();

Alle Modelle wiederherstellen

Post::withTrashed()->restore();

Zugeordnetes Abfragemodell wiederherstellen

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

Erzwungenes Löschen

Wenn das Modell mit weichem Löschen konfiguriert ist, wir aber wirklich die dem Modell entsprechenden Datenbanktabellendatensätze löschen möchten , wir können die von SoftDeletes bereitgestellte forceDelete-Methode verwenden:

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

PHP Chinesische Website, eine große Anzahl kostenloser Laravel-Einführungs-Tutorials, willkommen zum Online-Lernen!

Dieser Artikel wurde reproduziert von: https://blog.csdn.net/weixin_38112233/article/details/78574007

Das obige ist der detaillierte Inhalt vonErfahren Sie in einem Artikel mehr über das Löschen von Laravel-Modellen und das weiche Löschen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen