模型的 增、删、改、查
定义
参考资料:TP6 模型定义官网文档
app\index\controller\Index.php 代码
<?php
namespace app\index\controller;
use app\BaseController;
use app\index\model\Tp;
class Index extends BaseController
{
public function index()
{
$user = new Tp();
$arr = $user->getId(2);
dump($arr);
}
}
app\index\model\Tp.php 代码
<?php
namespace app\index\model;
use think\Model;
class Tp extends Model
{
public function getUser($where = null){
$arr = $this->where( ($where = null) ? " id >0 " : $where);
return $arr;
}
public function getId($id){
$this->model = $this->getUser();
return $this->model->find($id)->toArray();
}
}
图 ↓
注意:
- 模型定义,最好在各自的应用下的 model 文件夹下, 如 index 文件夹就是一个应用
- 模型其实就是 Db:: 类的一个增强,Db:: 类的所有语法,都可以在 model 使用
- 模型中返回的数据均是 「对象」 格式,调用元素需要用箭头指向 ->
- 如果需要返回数组,可以在模型中,调用 toArray() 返回数组形式
模型字段
参考资料:TP6 模型字段官方文档
如有需求,自行参考
增
参考资料:TP6 模型->新增 官方文档
- save() 单条插入数据,成功返回true
- saveAll() 批量插入数据,成功返回数据集
- 静态调用 create() 成功返回对象数据
save() 基础用法代码
<?php
namespace app\index\controller;
use app\BaseController;
use app\index\model\Tp;
class Index extends BaseController
{
public function index()
{
$user = new Tp();
$data = [
"nickname" => "modelSave",
"email" => "modelSave@qq.com",
"age" => 18
];
$back = $user->save($data);
dump($back);
}
}
图 ↓
save() 获取自增主键
在我看来,这个真的繁琐
如果仅仅是需要返回主键,可以直接用Db:: 写法调用 insertGetId()
<?php
namespace app\index\controller;
use app\BaseController;
use app\index\model\Tp;
class Index extends BaseController
{
public function index()
{
$user = new Tp();
$user->nickname = "modelSave";
$user->email = "modelSave@qq.com";
$user->age = 19;
$user->save();
//打印对象 id 主键
dump($user->id);
//返回对象
return $user;
}
}
图 ↓
saveAll() 使用方法
<?php
namespace app\index\controller;
use app\BaseController;
use app\index\model\Tp;
class Index extends BaseController
{
public function index()
{
$tp = new Tp();
$data =
[
[
"nickname" => "modelSave1",
"email" => "modelSave@qq.com1",
"age" => 11
],
[
"nickname" => "modelSave2",
"email" => "modelSave@qq.com2",
"age" => 12
],
[
"nickname" => "modelSave3",
"email" => "modelSave@qq.com3",
"age" => 13
],
];
$back = $tp->saveAll($data);
//返回对象
return $back;
}
}
图 ↓
静态调用 create()
<?php
namespace app\index\controller;
use app\BaseController;
use app\index\model\Tp;
class Index extends BaseController
{
public function index()
{
$data = [
"nickname" => "modelSave",
"email" => "modelSave@qq.com",
"age" => 18
];
//静态调用,编辑器不提示哦
$tp = Tp::create($data);
//返回对象
return $tp;
}
}
图 ↓
筛选插入
<?php
namespace app\index\controller;
use app\BaseController;
use app\index\model\Tp;
class Index extends BaseController
{
public function index()
{
$data = [
"nickname" => "筛选插入",
"email" => "不许插入"
];
$tp = Tp::create($data,["nickname"]);
dump($tp);
}
}
图 ↓
- 关于自动筛选以及自动插入,都会有个操作时间,可以在 config/database/php 设置
- 默认配置 'auto_timestamp' => true 意思是自动完成。如果需要特别指定,可以按照注释配置
- create 第二个参数,数组形式,是允许插入的字段
总结:尽量用 create() 静态方式新增单条数据,批量插入选择 saveAll() ,所有插入方法,均自动完成筛选。
改
参考资料:TP6 模型-> 更新 官方文档
- save() 使用方法自行领会,成功返回true
- saveAll() 使用方法同save(),成功返回对象数据集
- 静态调用 update() 成功返回对象数据
save() 与 saveAll() 不做详解 🤣🤣🤣
静态调用 update()
<?php
namespace app\index\controller;
use app\BaseController;
use app\index\model\Tp;
class Index extends BaseController
{
public function index()
{
//如果变更数据中有主键,可以免写第二参数 $where 条件
$data = [
"nickname" => "upName",
"email" => "upEmail",
"id" => 26
];
return Tp::update($data);
}
}
图 ↓
筛选修改
<?php
namespace app\index\controller;
use app\BaseController;
use app\index\model\Tp;
class Index extends BaseController
{
public function index()
{
$data = [
"nickname" => "筛选插入",
"email" => "不许插入"
];
$tp = Tp::update($data,["id" => 26],["email"]);
return $tp;
}
}
图 ↓
注意:
- 单条修改,依然推荐静态调用 update() ,多条推荐 saveAll()
- 如果修改数据中包含唯一主键,可以不传递条件参数
- 条件参数,数组形式 ['id' => 26]
- 筛选修改,第三个参数,数组形式,是允许的字段
查
参考资料:TP6 模型-> 查询 官方文档
<?php
namespace app\index\controller;
use app\BaseController;
use app\index\model\Tp;
class Index extends BaseController
{
public function index()
{
//可以用 Db 类所有写法
//静态查询
echo "查询单条 find() 默认条件查询是唯一主键 返回对象<br>
用toArray() 转数组格式";
dump(Tp::find(26)->toArray());
//查询多条
echo "查询多条 select() 默认条件查询是唯一主键 返回对象<br>
用toArray() 转数组格式";
dump(Tp::select([23,24])->toArray());
//查询单条
echo "查询单条 find() 默认条件查询是唯一主键 返回对象<br>
用toArray() 转数组格式";
$tp = new Tp();
dump($tp->find(26)->toArray());
echo "查询单条 select() 默认条件查询是唯一主键 返回对象<br>
用toArray() 转数组格式";
dump($tp->select([23,24])->toArray());
}
}
图 ↓
注意:
- 不管是在「控制器」还是在「模型」中,均支持 Db 类的所有写法
- 「控制器」推荐静态写法,如 Tp::where()->find()
- 「模型」推荐写法,如 $this->where()->find()
字段动态查询
<?php
namespace app\index\controller;
use app\BaseController;
use app\index\model\Tp;
class Index extends BaseController
{
public function index()
{
//如果查询为空,不能接toArray()
$tp = Tp::getByNickname("snail")->toArray();
dump($tp);
$tp = Tp::getByAge("12")->toArray();
dump($tp);
$tp = Tp::getByEmail("668346")->toArray();
dump($tp);
}
}
图 ↓
注意:
- getBy 接你的字段,注意驼峰写法
- 例:查询 nickname 字段 需要写成 getByNickname
- 比对使用的是 = 运算符
- 返回结果都是单条查询
删
delete() 成功返回 true/false
静态调用 destroy()
闭包条件删除
<?php
namespace app\index\controller;
use app\BaseController;
use app\index\model\Tp;
class Index extends BaseController
{
public function index()
{
//三种删除方法
// 动态 delete()
$tp = new Tp();
$back = $tp->where("id","=",18)->delete();
//静态调用
$del = Tp::destroy([26,27]);
echo $del;
//闭包条件删除
echo Tp::destroy(function ($query){
$query->where("id",">","20");
});
}
}
注意:
- 推荐闭包删除
- 单独使用 destroy() 删除,传入主键ID ,数组形式