前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >laravel 模型Eloquent ORM 添加编辑删除

laravel 模型Eloquent ORM 添加编辑删除

作者头像
风清醉
发布2019-12-18 17:44:18
1.7K0
发布2019-12-18 17:44:18
举报
文章被收录于专栏:小白的成长之路

既然玩了查询接着来玩玩添加编辑删除 CURD要完整嘛

添加

一般是前端传过来数据存到数据库,模型有一个 create 方法就是用来新增数据的,up 建个 store 方法

代码语言:javascript
复制
    function store(Test $TestMdl)
    {
        $postData = [
            'testId'   => '6',
            'title'    => '这是个title6',
            'email'    => '6666@qq.com',
            'describe' => '这是个describe6',
        ];
        $TestMdl->create($postData);
    }

如果我们直接访问这个方法是会报错的

因为在模型默认不允许进行批量赋值需要先定义允许 create 方法插入到数据库的字段,就是给 $fillable 属性定义允许赋值的字段 up 先在模型中定义 $fillable 属性

代码语言:javascript
复制
    /**
     * 可以被批量赋值的属性。
     *
     * @var array
     */
    protected $fillable = ['testId', 'title', 'email', 'describe'];

再次访问 store 就可以把数据插入到数据库中了,如果字段很多一个个定义贼慢,这时便需要 $guarded 属性 登场了,这个属性是用来定义不允许复制的字段的,但是up现在不需要保护表里的字段。那么直接给 $guarded 赋值为空数组就等于没有任何限制了

代码语言:javascript
复制
/**
 * 不可批量赋值的属性。
 *
 * @var array
 */
protected $guarded = [];

需要注意的是 $fillable$guarded 只能定义其中的一个,不能同时存在

create 方法的返回值就是当前插入到数据库中的内容up可以通过返回值判断成功或者失败而实际开发中up经常需要返回新增数据的id那直接访问返回值的 id 属性即可。

代码语言:javascript
复制
    function store(Test $TestMdl)
    {
        $postData = [
            'testId'   => '8',
            'title'    => '这是个title8',
            'email'    => '6666777888@qq.com',
            'describe' => '这是个describe888',
        ];
        $res = $TestMdl->create($postData);
        dump($res);
        dump($res->id);
    }

编辑

刚刚添加了数据这边在编辑下数据咯,这里就要用到 update 方法了,这个就简单了

代码语言:javascript
复制
    function update(Test $TestMdl)
    {
        $postId = 8;
        $postData = [
            'testId'   => '8',
            'title'    => '这是个title8888866666',
            'email'    => '6666777888@qq.com',
            'describe' => '这是个describe88866666',
        ];
        $res = $TestMdl->where('id',$postId)->update($postData);
        dump($res);
    }

update 方法的返回值是被改动的数据的条数

我们查看下数据

数据中一眼就发现了后三条数据的不同,我们之前用 DB 插入到数据库中的数据 created_atupdated_at 字段都是空,而我们用模型插入和修改后 created_atupdated_at 自动都变成了插入或者修改的时间了,这就是使用模型的好处一大好处

删除

但是最后的这个 deleted_at 是空的,这个字段应该怎么用呢?接下来 up 来学下模型的删除。

删除数据是一件很危险的行为,up 刚刚入行的时候不小心给生产环境的用户表删除了,当时全靠谷歌用的好给恢复了不然我就跑路了?,现实版删库跑路?。当时我希望能有一个恢复删除的功能比如说回收站,laravel 的模型为我们提供了很方便的软删除功能

要启用软删除首先数据表需要有 deleted_at 字段 之前玩迁移的时候简单的说了下创建迁移的时候调用 softDeletes 即可,模型默认是没有开启软删除功能的开启也很简单就是使用SoftDeletes

代码语言:javascript
复制
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Test extends Model
{
    use SoftDeletes;
}

Tip: SoftDeletes trait 会自动将 deleted_at 属性转换成 DateTime / Carbon 实例

当然,你需要把 deleted_at 字段添加到数据表中。 Laravel 的 数据库迁移 有创建这个字段的方法

现在,当你在模型实例上使用 delete 方法, 当前日期时间会写入 deleted_at 字段。同时,查询出来的结果也会自动排除已被软删除的记录。

代码语言:javascript
复制
    /**
     * 删除数据
     */
    public function delete(Test $TestMdl)
    {
        $id = 8;
        $result = $TestMdl->where('id', $id)->delete();
        dump($result);
    }

让我来查询一下数据

数据并没有真正被删除只是 deleted_at 不是 null 而是删除的时间了

让我们用代码去查询一下访问一下之前的 index 方法

up发现 id等于8的数据已经查询不到了,如果想查询到这条数据改怎么做呢,可以调用 withTrashed 方法

代码语言:javascript
复制
    function getWith(Test $testMdl)
    {
        $data = $testMdl->withTrashed()->get();
        dump($data->toArray());
    }

我们来访问一下

现在刚刚软删除的数据又回来了,如果up只想查询乱删除的数据呢?可以用 onlyTrashed 方法

代码语言:javascript
复制
    function getOnly(Test $testMdl)
    {
        $data = $testMdl->onlyTrashed()->get();
        dump($data->toArray());
    }

到这一步离实现回收站功能 就差个能恢复删除的方法,很简单调用 restore 方法即可

代码语言:javascript
复制
    function restoreData(Test $testMdl)
    {
        $id = 8;
        $data = $testMdl->where('id', $id)->restore();
        dump($data);
    }

执行完这个在查询下数据库

up 发现 deleted_at 已经被置空这个时候在请求 index 方法

之前乱删除的数据变恢复回来了

但是如果要彻底删除改怎么做呢?同样很简单调用 forceDelete 方法即可

代码语言:javascript
复制
    function completelyDelete(Test $testMdl){
        $id = 8;
        $data = $testMdl->where('id', $id)->forceDelete();
        dump($data);
    }

执行完毕后up来查询下数据库

id等于8的数据被彻底删除啦

到现在增删改查 up 就都了解了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 添加
  • 编辑
  • 删除
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档