Heim > PHP-Framework > Laravel > Hauptteil

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

爱喝马黛茶的安东尼
Freigeben: 2019-11-20 17:06:52
nach vorne
4286 Leute haben es durchsucht

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 '删除文章失败!';
}
Nach dem Login kopieren

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);
Nach dem Login kopieren

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

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

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();
Nach dem Login kopieren

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;];
}
Nach dem Login kopieren

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
Nach dem Login kopieren

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();
        });
    }
    ...//其它方法
}
Nach dem Login kopieren

und führen Sie dann Folgendes aus:

php artisan migrate
Nach dem Login kopieren

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;;
}
Nach dem Login kopieren

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);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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();
Nach dem Login kopieren

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

sollte

$post = Post::withTrashed()->find(6);
$post->restore();
Nach dem Login kopieren

Mehrere Modelle wiederherstellen

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

Alle Modelle wiederherstellen

Post::withTrashed()->restore();
Nach dem Login kopieren

Zugeordnetes Abfragemodell wiederherstellen

$post = Post::find(6);
$post->history()->restore();
Nach dem Login kopieren

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();
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage