最新公告
  • 欢迎您光临立业阁,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 一文了解laravel模型删除和软删除_php框架教程



    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,该trait为软删除提供一系列相关方法,具体可参考源码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 = 'posts';
        //设置主键
        public $primaryKey = 'id';
        //设置日期时间格式
        public $dateFormat = 'U';
        protected $guarded = ['id','views','user_id','updated_at','created_at'];
        protected $dates = ['delete_at'];
    }

    然后对应的数据库posts中添加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('posts', function (Blueprint $table) {
                $table->softDeletes();
            });
        }
        ...//其它方法
    }

    然后运行:

    php artisan migrate

    这样posts中就有了deleted_at列。接下来,我们在控制器中编写测试代码:

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

    那如果想要在查询结果中包含软删除的记录呢?可以使用SoftDeletes trait上的withTrashed方法:

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

    有时候我们只想要查看被软删除的模型,这也有招,通过SoftDeletes上的onlyTrashed方法即可:

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

    软删除恢复

    有时候我们需要恢复被软删除的模型,可以使用SoftDeletes提供的restore方法:

    恢复单个模型

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

    有点问题,ID为6的已经被软删除了,Post::find(6) 是查不到数据的,

    应该

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

    恢复多个模型

    Post::withTrashed()->where('id','>',1)->restore();

    恢复所有模型

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

    恢复关联查询模型

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

    强制删除

    如果模型配置了软删除但我们确实要删除改模型对应数据库表记录,则可以使用SoftDeletes提供的forceDelete方法:

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

    liyege,大量的免费laravel入门教程,欢迎在线学习!

    本文转自:https://blog.csdn.net/weixin_38112233/article/details/78574007

    以上就是一文了解laravel模型删除和软删除的详细内容,更多请关注liyege.cn其它相关文章!

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    • 1154会员总数(位)
    • 111856资源总数(个)
    • 6本周发布(个)
    • 0 今日发布(个)
    • 240稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情
    冀ICP备19022365号-1 百度地图

    侵权联系邮箱[email protected]

    立业阁(www.liyege.cn)免费提供wordpress主题模板、dedecms模板、帝国cms模板、小说网站源码、电影网站源码以及网络技术分享,建站源码,小说模板,电影模板,网赚教程,VPS推荐