既然玩了查询接着来玩玩添加编辑删除 CURD要完整嘛
一般是前端传过来数据存到数据库,模型有一个 create 方法就是用来新增数据的,up 建个 store 方法
function store(Test $TestMdl)
{
$postData = [
'testId' => '6',
'title' => '这是个title6',
'email' => '6666@qq.com',
'describe' => '这是个describe6',
];
$TestMdl->create($postData);
}
如果我们直接访问这个方法是会报错的
因为在模型默认不允许进行批量赋值需要先定义允许 create
方法插入到数据库的字段,就是给 $fillable
属性定义允许赋值的字段
up 先在模型中定义 $fillable
属性
/**
* 可以被批量赋值的属性。
*
* @var array
*/
protected $fillable = ['testId', 'title', 'email', 'describe'];
再次访问 store
就可以把数据插入到数据库中了,如果字段很多一个个定义贼慢,这时便需要 $guarded 属性
登场了,这个属性是用来定义不允许复制的字段的,但是up现在不需要保护表里的字段。那么直接给 $guarded
赋值为空数组就等于没有任何限制了
/**
* 不可批量赋值的属性。
*
* @var array
*/
protected $guarded = [];
需要注意的是 $fillable
和 $guarded
只能定义其中的一个,不能同时存在
create 方法的返回值就是当前插入到数据库中的内容up可以通过返回值判断成功或者失败而实际开发中up经常需要返回新增数据的id那直接访问返回值的 id 属性即可。
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
方法了,这个就简单了
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_at
和 updated_at
字段都是空,而我们用模型插入和修改后 created_at
和 updated_at
自动都变成了插入或者修改的时间了,这就是使用模型的好处一大好处
但是最后的这个 deleted_at
是空的,这个字段应该怎么用呢?接下来 up 来学下模型的删除。
删除数据是一件很危险的行为,up 刚刚入行的时候不小心给生产环境的用户表删除了,当时全靠谷歌用的好给恢复了不然我就跑路了?,现实版删库跑路?。当时我希望能有一个恢复删除的功能比如说回收站,
laravel
的模型为我们提供了很方便的软删除功能
要启用软删除首先数据表需要有 deleted_at
字段
之前玩迁移的时候简单的说了下创建迁移的时候调用 softDeletes
即可,模型默认是没有开启软删除功能的开启也很简单就是使用SoftDeletes
<?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 字段。同时,查询出来的结果也会自动排除已被软删除的记录。
/**
* 删除数据
*/
public function delete(Test $TestMdl)
{
$id = 8;
$result = $TestMdl->where('id', $id)->delete();
dump($result);
}
让我来查询一下数据
数据并没有真正被删除只是 deleted_at 不是 null 而是删除的时间了
让我们用代码去查询一下访问一下之前的 index
方法
up发现 id等于8的数据已经查询不到了,如果想查询到这条数据改怎么做呢,可以调用 withTrashed
方法
function getWith(Test $testMdl)
{
$data = $testMdl->withTrashed()->get();
dump($data->toArray());
}
我们来访问一下
现在刚刚软删除的数据又回来了,如果up只想查询乱删除的数据呢?可以用 onlyTrashed
方法
function getOnly(Test $testMdl)
{
$data = $testMdl->onlyTrashed()->get();
dump($data->toArray());
}
到这一步离实现回收站功能 就差个能恢复删除的方法,很简单调用 restore
方法即可
function restoreData(Test $testMdl)
{
$id = 8;
$data = $testMdl->where('id', $id)->restore();
dump($data);
}
执行完这个在查询下数据库
up 发现 deleted_at
已经被置空这个时候在请求 index
方法
之前乱删除的数据变恢复回来了
但是如果要彻底删除改怎么做呢?同样很简单调用 forceDelete
方法即可
function completelyDelete(Test $testMdl){
$id = 8;
$data = $testMdl->where('id', $id)->forceDelete();
dump($data);
}
执行完毕后up来查询下数据库
id等于8的数据被彻底删除啦
到现在增删改查 up 就都了解了