广告装饰 技术支持 东莞网站建设,网站怎么添加管理员,wordpress完美搬家,上海百度研发中心【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客
《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书
使用VS Code开发ThinkPHP项目-CSDN博客
编程与应用开…【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客
《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书
使用VS Code开发ThinkPHP项目-CSDN博客
编程与应用开发_夏天又到了的博客-CSDN博客 8.1 模型定义 定义模型非常简单继承think\Model即可。下面是一个用户模型的示例
?php
namespace app\model;use think\Model;class User extends Model
{}
默认情况下模型类名是去除表前缀的数据表名称采用大驼峰命名法。比如下面的示例
User - think_userUserWallet - think_user_wallet
模型的$table属性可以手动指定数据表名称下面是一个数据表为users的模型示例
【示例8-1】
?php
namespace app\model;use think\Model;class User extends Model
{protected $tableusers; // 手动指定数据表名称}
其他常用的模型属性包括$pk和$connection。$pk用来指定主键字段默认为id如果数据表主键不是id则需要重新定义。$connection用来指定模型使用的数据库连接。
下面是一个指定主键和数据库连接的示例。
【示例8-2】
?php
namespace app\model;use think\Model;class User extends Model
{protected $pk user_id; // 指定主键多对多关联中必须指定主键protected $connection user; // 手动指定数据表名称
}
模型字段用来指定模型属性的数据类型推荐每个模型类都进行定义ThinkPHP 8默认会自动获取数据表的字段类型需要查询一次数据库。在生产实践中一般会开启字段缓存以避免频繁获取字段类型的开销。
模型的数据字段和对应数据表的字段是对应的默认会自动获取包括字段类型但自动获取会导致增加一次查询可以开启字段缓存功能因此需要在模型中明确定义字段信息以避免多一次查询的开销。下面是一个手动定义模型字段的示例。
【示例8-3】
?php
namespace app\model;use think\Model;class User extends Model
{// 设置字段信息protected $schema [id int,username string,password string,age int,balance float,created_at datetime,updated_at datetime,];
}上述代码中模型字段对应数据库中的User表字段$schema属性需要定义所有字段。如果只需要手动指定某些字段的数据类型则可以使用$type属性示例如下
【示例8-4】
?php
namespace app\model;use think\Model;class User extends Model
{// 设置字段信息protected $type [balance float,];
}8.2 插入数据 使用模型插入数据和查询构造器插入数据最大的不同是模型会执行修改器、自动完成等逻辑而数据库操作只是单纯的数据插入。
在调用模型实例的save方法插入数据时如果插入成功则返回true否则会抛出异常。
【示例8-5】
本示例演示每个字段单独赋值。首先在mydb库中创建一张表语句为
CREATE TABLE users (id int NOT NULL AUTO_INCREMENT,name varchar(45) NOT NULL,nickname varchar(45) NOT NULL,status int DEFAULT 0,PRIMARY KEY (id)
) ENGINEInnoDB AUTO_INCREMENT5 DEFAULT CHARSETutf8mb3;控制器User代码如下
?php
namespace app\controller;use app\model\UserModel;class User {public function create() {$user new UserModel();$data [name John Doe,nickname John Bull,status 1];$result $user-save($data);if ($result) {return 创建成功;} else {return 创建失败;}}
}对应的Model为app\model\UserModel.php代码如下
?php
namespace app\model;use think\Model;class UserModel extends Model {// 设置当前模型对应的完整数据表名称protected $table users;// 设置模型名称protected $name user;// 设置可以批量赋值的字段列表protected $field [id, name, nickname, status];
}启动服务器在浏览器中访问http://localhost:8000/user/create页面将提示“创建成功”。当然ThinkPHP 8也提供批量赋值的方法
$user new User;
$user-save([name Bruce Lee,nickname Lee three foots,status 1
]);1. REPLACE语句插入
REPLACE语句在数据库中通常用于插入新行或更新现有行。其工作原理类似于INSERT语句但当新行与一个已有的行根据PRIMARY KEY或UNIQUE索引产生唯一性约束冲突时旧行将被删除然后新行被插入。因此它可以视为一个删除如果有需要和插入的组合操作。
调用模型的replace方法可以进行REPLACE插入
$user new User;$user-replace()-save([username test,password password_hash(test, PASSWORD_DEFAULT);]);
2. 批量插入
调用模型实例的saveAll方法可以批量插入数据。当数据行包含主键时ThinkPHP 8会执行更新操作否则执行插入操作代码如下
$user new User;$list [[name test,age 20], // 识别为插入操作[id 2,name test1,age 21], // 识别为更新操作];$user-saveAll($list);
3. create方法插入
使用模型类的create方法插入数据是一种常用的方法它可以返回模型实例代码如下
$user User::create([name test,age 20]); 8.3 更新数据 save方法会自动根据是否有主键来决定执行插入和更新操作无须开发者手动调用更新方法。对于更新操作一般需要先查询出模型实例给对应的字段赋值最后调用save方法更新数据下面是一个示例
$user User::where(username,test)-find();
if(!empty($user)) {$user-age 20;$user-save();
}
还可以使用模型类的update方法更新数据返回对应的模型实例
User::update([age 20], [id 1]); 8.4 删除数据 使用模型来删除数据会执行模型的事件处理逻辑而直接使用查询构造器删除数据则不会执行模型的事件处理逻辑。下面是几种删除数据的方法
$user User::find(1);
$user-delete(); // 调用模型实例的delete方法User::destroy(1); // 静态方法删除
User::destroy([1,2,3]); // 支持批量删除多个数据User::where(age, , 20)-delete(); // 基于where条件删除