IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> TP5 模型新增的返回值、返回值的判断以及所使用的SQL -> 正文阅读

[大数据]TP5 模型新增的返回值、返回值的判断以及所使用的SQL

TP5 模型新增主要使用静态方法?create?和动态方法?save?

静态方法?create?

直接使用模型类静态调用,例如 Test 模型类新增 username 为 a 的用户,如下

$data = ['username' => 'a'];

$result = TestModel::create($data);

生成的 SQL 如下

 INSERT INTO `test` (`username`) VALUES ('a') 

返回值

执行 create 方法成功则返回当前新增数据的模型类实例,失败则报错

重要提醒

执行 create 方法成功不代表新增数据成功,如果当前新增数据的字段名在数据库内是不存在的, create 方法是不会向数据库发送 SQL 语句的,如下

$test = new TestModel();

$data = ['name' => 'a'];

$result = TestModel::create($data);

因为模型在执行新增操作前,会发送一条 SQL 语句获得表结构,如下

SHOW COLUMNS FROM `test`

因为 name 字段在表结构中是不存在的,所以 create 方法是不会向数据库发送 SQL 语句的,而且 create 方法不会有任何错误提示,依然能返回新增数据的模型类实例,如下

object(app\index\model\Test)#43 (2) {
  ["data"]=>
  array(1) {
    ["name"]=>
    string(1) "a"
  }
  ["relation"]=>
  array(0) {
  }
}

动态方法 save

使用模型类实例动态调用,例如 Test 模型类实例新增 username 为 a 的用户,如下

$obj = new TestModel();

$data = ['username' => 'a'];
    
$result = $obj->save($data);

生成的 SQL 如下

INSERT INTO `test` (`username`) VALUES ('a') 

返回值

V5.1.6+版本以前

save 方法返回新增的记录数

V5.1.6+版本以后

统一返回布尔值,如果执行 save 方法成功则返回 true(哪怕新增的行数是 0 也是返回 true ),并只有当?before_update 事件返回?false 的时候返回?false

重要提醒

1、从 V5.1.6+版本开始,save 方法只管执行 SQL 不管 SQL 执行后的结果,执行 SQL 成功则返回 true(哪怕新增的行数是 0 也是返回 true )

2、和静态方法 create 一样,执行 save 方法成功不代表新增数据成功,如果当前新增数据的字段名在数据库内是不存在的, save 方法是不会向数据库发送 SQL 语句的,如下

$data = ['name' => 'a']; // name 字段在表结构中是不存在的

$obj = new TestModel();

$result = $obj->save($data);

因为模型在执行新增操作前,会发送一条 SQL 语句获得表结构,如下

SHOW COLUMNS FROM `test`

因为 name 字段在表结构中是不存在的,所以 save 方法是不会向数据库发送 SQL 语句的,而且 save 方法不会有任何错误提示,依然能返回 true,如下

bool(true)

更重要提醒

save 方法会修改调用它的对象的数据

$user = new TestModel();

echo ("<pre>");
var_dump($user);
echo ("</pre>");

//新增前的 Test 实例
object(app\index\model\Test)#43 (2) {
  ["data"]=>
  array(0) {
  }
  ["relation"]=>
  array(0) {
  }
}


//执行新增
$data = ['name' => 'a'];
$user->save($data);


echo ("<pre>");
var_dump($user);
echo ("</pre>");

//执行新增后的 Test 实例
object(app\index\model\Test)#43 (2) {
  ["data"]=>
  array(1) {
    ["name"]=>
    string(1) "a"
  }
  ["relation"]=>
  array(0) {
  }
}

如上,Test 类实例的 data 属性(数组)里多了一个 name ,和 save 方法新增数据库里的数据是保持一致的。

更更重要提醒

因为模型的新增方法和更新方法都是 save 方法,所以 tp5 框架有一套默认的规则来识别当前 save 方法要执行新增操作还是更新操作

1、不查询数据,直接模型对象调用 save 方法,表示新增

2、查询数据后调用 save 方法表示更新

3、save 方法传入更新条件表示更新

4、可以在执行 save 方法前执行 isUpdate ( false) 方法指定当前 save 方法执行新增操作

5、不要用同一个模型类实例执行多次 save 方法,如果确实需要多次新增,可以使用静态方法 create?

6、如果你调用 save 方法进行多次数据新增,需要注意,第二次 save 方法的时候必须使用 isUpdate ( false) ,否则会视为更新操作。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:34:29  更:2022-11-05 00:34:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:32:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码