09 模型的增删查改《ThinkPHP6 入门到电商实战》
一、模型
在前面几节中我们已经学习了如何新建一个模型,以下是一个示例,首先创建一个 model 文件夹,随后在文件夹中创建一个php文件,在此我命名为 student:
随后在 student 文件中编写下面内容:
<?php
namespace app\model;
use think\Model;
class Student extends Model
{
}
这样该 Student 类就直接对应了student表,可以操作 student 表了。
若你觉得这个类名会引起冲突,你可以更改这个类名为,例如 StudentModel,随后指定对应的表名即可:
class StudentModel extends Model
{
protected $name = 'student';
}
也可以在use 时使用 as 指定别名:
use app\model\StudentModel as StudentTable;
在此需要注意,使用模型时会自动的有一次查询获取表的字段,会额外增加开销,若要解决这个问题需要在新建模型类时对应的完整的配置字段信息,否则只会有你所编写的信息,例如:
class StudentModel extends Model
{
protected $name = 'student';
protected $schema = [
'id' => 'bigint',
'name' => 'varchar',
'height' => 'bigint',
'nickname' => 'varchar'
];
}
二、模型中重写方法
在使用模型时,还可以在模型类中编写一些方法,例如获取器方法可在模型中重写,可以使其自动调用,并且可以在其中编写逻辑。例如当获取一个人的身高是否达标时,大于169则是达标,那么此时模型中可以编写为如下方法:
<?php
namespace app\model;
use think\Model;
class StudentModel extends Model
{
protected $name = 'student';
protected $schema = [
'id' => 'int',
'name' => 'string',
'height' => 'int',
'nickname' => 'string'
];
public function getHeightAttr($value) {
$height='不达标';
if($value>169){
$height='达标';
}
return $height;
}
}
其中在模型中获取器的使用方法为 getFieldAttr,所以在此处命名为 getHeightAttr,其中 $value 是对应的 Height 值,随后我们在使用时如下:
public function useModel(){
$student = StudentModel::find(7);
echo $student->height;
}
此时结果如下:
.使用 return json($student);
后效果如下,若直接使用 dump 所看到的是原本的数据:
不修改的原始数据使用 getdata方法输出 :
return json($student->getData());
二、模型数据新增
在使用模型进行新增时使用的是 save 方法,例如如下示例:
public function useModel(){
$student = new StudentModel();
$student->name = '张小强';
$student->height = 188;
$student->nickname = '小强';
$res=$student->save();
dump($res);
}
首先创建一个模型对象,随后指定对应的列表值,接着调用 save方法即可,以下是结果:
我们可以看到,此时返回一个布尔值判断操作是否成功。
也可以通过数组的方式进行传递新增内容:
public function useModel(){
$student = new StudentModel();
$data=[ 'name' => '王小强', 'height' => 199, 'nickname' => '小王'];
$res=$student->save($data);
dump($res);
}
同样也支持 allowField() 方法表示允许传入的值:
public function useModel(){
$student = new StudentModel();
$data=[ 'name' => '张小丽', 'height' => 180, 'nickname' => '小丽'];
$res=$student->allowField(['name','height'])->save($data);
dump($res);
}
此时操作即使成功,但没有允许的值将不会传入:
批量增加数据使用 saveAll 方法:
public function useModel(){
$student = new StudentModel();
$data=[
[ 'name' => '胡磊', 'height' => 160, 'nickname' => '小磊'],
[ 'name' => '王晓', 'height' => 170, 'nickname' => '小晓'],
[ 'name' => '张国楠', 'height' => 167, 'nickname' => '小楠'],
[ 'name' => '罗明生', 'height' => 166, 'nickname' => '小罗']
];
$res=$student->allowField(['name','height','nickname'])->saveAll($data);
dump($res);
}
此时将会返回一个 Collection 对象:
查看数据库,成功传入:
三、数据删除
使用模型删除数据很简单,一种是 delete 方法,使用 delete 方法需要首先使用 find 方法找到对应的 id 值,再调用 delete 方法,例如以下示例:
public function useModel(){
$student = StudentModel::find(21);
$res=$student->delete();
dump($res);
}
此时返回的结果是布尔值:
还有几种删除方式如下:
StudentModel::destroy(21);
StudentModel::destroy([11,12,15,17]);
StudentModel::where('id', '=', 11)->delete();
四、查数据
以上已经演示了 find 方法,之后还可以通过 select 方法,where方法等,例如以下示例:
public function useModel(){
$student = StudentModel::find(18);
dump($student);
$student = StudentModel::where('name', '一库')->find();//通过where
dump($student);
$student = StudentModel::select([3,4,6]);//等同于in
dump($student);
$student = StudentModel::whereIn('id',[3,4,6])->column('name','nickname');//找到对应id的值返回对应列
dump($student);
$student = StudentModel::getByname('胡磊');//动态查询name为胡磊值
dump($student);
}
模型进行查询与之前的类似,就不过多赘述,详细参考文档。
五、改数据
以下介绍两种更新方法,单数据更新和多数据更新,其他方式跟非模型类似,查看手册即可:
public function useModel(){
//单数据更新
$student = StudentModel::find(7);
$student->name = '勇子';
$student->nickname = '勇';
$student->save();
//多数据更新
$student = new StudentModel();
$data = [
[
'id'=>8,
'name'=>'PHP',
'nickname'=>'派hp'
],
[
'id'=>9,
'name'=>'HTML',
'nickname'=>'爱去TML'
]
];
$student->saveAll($data);
}
此时数据已成功更改:
相关文章
- 01 thinkphp6的前期开发准备《ThinkPHP6 入门到电商实战》
- Python 协程 asyncio 极简入门与爬虫实战
- 跟我一起学Golang从入门到精通《Go语言的注释》
- 5.Prometheus监控入门之企业监控实战采集展示
- 10 关联模型《ThinkPHP6 入门到电商实战》
- 05Prism WPF 入门实战 - Navigation
- 二、Qt定时器与文本编辑器制作《QT 入门到实战》
- 【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?
- FastAPI从入门到实战(6)——请求体与嵌套模型
- Burpsuite入门之target模块攻防中利用
- Spark入门实战系列–7.Spark Streaming(上)–实时流计算Spark Streaming原理介绍详解大数据
- Spark入门实战系列–10.分布式内存文件系统Tachyon介绍及安装部署详解大数据
- Drools6版本(BRMS) 快速入门详解编程语言
- Linux下C编程实战:从入门到精通(linux环境下c编程)
- Linux入门:快速了解基本知识点(linux入门知识点)
- MySQL:从入门到精通(mysql入门到精通)
- 快速入门:如何在linux中打开ELF文件(linux打开elf文件)
- MSSQL编程入门指南,轻松掌握数据库开发技能(mssql编程)
- Linux驱动开发:从入门到实战(Linux驱动开发入门与实战)
- Oracle数据库入门初步浅析与详细说明(oracle入门及详解)
- C语言和MySQL结合从入门到精通(c mysql使用教程)
- Redis入门宝典详析Redis的精髓(redis详细教学)
- php操作xml入门之xml基本介绍及xml标签元素