search
HomePHP FrameworkLaravelLearn about laravel model deletion and soft deletion in one article

Learn about laravel model deletion and soft deletion in one article

##1. Delete the model

1.1 Use delete to delete a model

Deleting a model is very simple. First get the model instance to be deleted, and then call the delete method:

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

The The method returns true or false.

1.2 Use destroy to delete the model

Of course, if the model ID to be deleted is known, you can use the simpler method destroy to delete it directly:

$deleted = Post::destroy(5);

You can also delete multiple models by passing in multiple model IDs at one time:

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

Call the destroy method to return the number of deleted records.

1.3 Use the query builder to delete the model

Since it was mentioned earlier that the Eloquent model itself is a query builder, you can also delete the model using the query builder style, For example, if we want to delete all articles with 0 views, we can use the following method:

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

The return result is the number of deleted articles.

2. Soft deletion implementation

The above deletion methods will delete the data table records from the database. In addition, the Eloquent model also supports soft deletion.

The so-called soft deletion means that the data table records are not actually deleted from the database, but the identification status of the table records is marked as soft deletion, so that it can be filtered when querying, so that the corresponding table records It looks like it has been "deleted". Laravel uses a date field as the identification status. This date field can be customized. Here we use deleted_at. If the corresponding model is soft-deleted, the value of the deleted_at field is the deletion time, otherwise the value is empty.


To make the Eloquent model support soft deletion, some settings need to be made. First, use SoftDeletestrait in the model class. This trait provides a series of related methods for soft deletion. For details, please refer to the source code Illuminate\Database\Eloquent\SoftDeletes. In addition, you must set the $date attribute array and place deleted_at in it:


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

Then add the deleted_at column to the corresponding database posts. We use migration to implement it. First execute the Artisan command:

php artisan make:migration alter_posts_deleted_at --table=posts

Then edit the generated PHP file as follows:

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

Then run:

php artisan migrate

So there is a deleted_at column in the posts. Next, we write the test code in the controller:

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

What if we want to include soft-deleted records in the query results? You can use the withTrashed method on the SoftDeletes trait:

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

Sometimes we only want to view the soft-deleted model. There is also a trick, through the onlyTrashed method on SoftDeletes:

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

Soft Deletion Recovery

Sometimes we need to restore a soft-deleted model. You can use the restore method provided by SoftDeletes:

Restore a single There is something wrong with model

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

. The one with ID 6 has been soft deleted. Post::find(6) cannot find the data.

should

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

Restore multiple models

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

Restore all models

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

Restore associated query model

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

Forced deletion

If the model is configured with soft deletion but we really want to delete the database table records corresponding to the model, we can use the forceDelete method provided by SoftDeletes:

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

PHP Chinese website, a large number of free

laravel introductory tutorials, welcome to learn online!

This article is reproduced from: https://blog.csdn.net/weixin_38112233/article/details/78574007

The above is the detailed content of Learn about laravel model deletion and soft deletion in one article. For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:CSDN. If there is any infringement, please contact admin@php.cn delete
The Illusion of Inclusion: Addressing Isolation and Loneliness in Remote WorkThe Illusion of Inclusion: Addressing Isolation and Loneliness in Remote WorkApr 25, 2025 am 12:28 AM

Tocombatisolationandlonelinessinremotework,companiesshouldimplementregular,meaningfulinteractions,provideequalgrowthopportunities,andusetechnologyeffectively.1)Fostergenuineconnectionsthroughvirtualcoffeebreaksandpersonalsharing.2)Ensureremoteworkers

Laravel for Full-Stack Development: A Comprehensive GuideLaravel for Full-Stack Development: A Comprehensive GuideApr 25, 2025 am 12:27 AM

Laravelispopularforfull-stackdevelopmentbecauseitoffersaseamlessblendofbackendpowerandfrontendflexibility.1)Itsbackendcapabilities,likeEloquentORM,simplifydatabaseinteractions.2)TheBladetemplatingengineallowsforclean,dynamicHTMLtemplates.3)LaravelMix

Video Conferencing Showdown: Choosing the Right Platform for Remote MeetingsVideo Conferencing Showdown: Choosing the Right Platform for Remote MeetingsApr 25, 2025 am 12:26 AM

Key factors in choosing a video conferencing platform include user interface, security, and functionality. 1) The user interface should be intuitive, such as Zoom. 2) Security needs to be paid attention to, and Microsoft Teams provides end-to-end encryption. 3) Functions need to match requirements, GoogleMeet is suitable for short meetings, and CiscoWebex provides advanced collaboration tools.

What database versions are compatible with the latest Laravel?What database versions are compatible with the latest Laravel?Apr 25, 2025 am 12:25 AM

The latest version of Laravel10 is compatible with MySQL 5.7 and above, PostgreSQL 9.6 and above, SQLite 3.8.8 and above, SQLServer 2017 and above. These versions are chosen because they support Laravel's ORM features, such as the JSON data type of MySQL5.7, which improves query and storage efficiency.

The Benefits of Using Laravel as a Full-Stack FrameworkThe Benefits of Using Laravel as a Full-Stack FrameworkApr 25, 2025 am 12:24 AM

Laravelisanexcellentchoiceforfull-stackdevelopmentduetoitsrobustfeaturesandeaseofuse.1)ItsimplifiescomplextaskswithitsmodernPHPsyntaxandtoolslikeBladeforfront-endandEloquentORMforback-end.2)Laravel'secosystem,includingLaravelMixandArtisan,enhancespro

What is the latest version of Laravel?What is the latest version of Laravel?Apr 24, 2025 pm 05:17 PM

Laravel10,releasedonFebruary7,2023,isthelatestversion.Itfeatures:1)Improvederrorhandlingwithanewreportmethodintheexceptionhandler,2)EnhancedsupportforPHP8.1featureslikeenums,and3)AnewLaravel\Promptspackageforinteractivecommand-lineprompts.

How does the newest Laravel version simplify development?How does the newest Laravel version simplify development?Apr 24, 2025 pm 05:01 PM

ThelatestLaravelversionenhancesdevelopmentwith:1)Simplifiedroutingusingimplicitmodelbinding,2)EnhancedEloquentcapabilitieswithnewquerymethods,and3)ImprovedsupportformodernPHPfeatureslikenamedarguments,makingcodingmoreefficientandenjoyable.

Where can I find the release notes for the latest Laravel version?Where can I find the release notes for the latest Laravel version?Apr 24, 2025 pm 04:53 PM

You can find the release notes for the latest Laravel version at laravel.com/docs. 1) Release Notes provide detailed information on new features, bug fixes and improvements. 2) They contain examples and explanations to help understand the application of new features. 3) Pay attention to the potential complexity and backward compatibility issues of new features. 4) Regular review of release notes can keep it updated and inspire innovation.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version