无论是基础查询还是高级查询,实际都会依赖表实体,一个表字段和一个类属性的关系通过映射实现,而对类的操作也就相当于在对数据表操作。Swoft 2.x 中实体类对比 1.x 使用起来更简单,它兼容 Builder 查询构造器所有的方法,使用实体类和查询构造器的方法一致。

实体类不需要自己编写,用 swoft 提供的命令行操作实现即可

注意

swoft的模型就是实体 Entity ,一个实体的结构对应一张数据表的结构。每一个实体的实例就是对应数据库的一条记录,因此不能使用 @Inject 注入。

创建模型实体

php bin/swoft entity:create --table=products,products_class  --pool=db.pool 

通过命令生成,命令参数:

  • exclude STRING Expect generate database table entity, alias is ‘exc’
  • field_prefix STRING 别名 “fp”,去除字段前缀,如:user_info 使用参数 —fp=user 生成的字段竟会变成 info
  • path STRING 生成实体存放路径,默认:@app/Model/Entity
  • pool STRING 选择数据库连接池,默认:db.pool
  • remove_prefix STRING 别名 “rp”,去除表前缀生存实体,如:user_info 表生成的文件是 UserInfo.php,使用参数 —rp=user 生成是 Info.php
  • table STRING 选择要生成实体的数据表,—table=products,member_info 会生成两个指定表的实体
  • table_prefix STRING 别名 “tp”,生成实体去除表前缀如 table_prefix=products @Entity(table=”products_class”) 去除后 @Entity(table=”class”)
  • td STRING 生成实体的模版,默认: @devtool/devtool/resource/template
  • -y STRING 自动确认类似linux安装命令的 -y

实体注解

@Entity

通过注解标签 @Entity 指定类为实体类。

参数说明:

  • table:需映射的数据库表名(必填)
  • pool:连接池,默认为 db.pool

@Column

通过注解标签 @Column 指定成员属性为字段名。如果字段未添加 @Column 标签,那么在查询时该列(字段)不会展示。即使新增字段也不会影响生产环境。

参数说明:

  • name:需映射的数据表字段名。默认值为成员属性
  • prop:字段别名,仅在调用 toArray 方法时被转换。使用 where 等子方法时仍需使用数据库字段名
  • hidden:字段是否隐藏。仅在调用 toArray 方法时会被隐藏,但并不影响通过 getter 方法获取。可以通过调用实体 addVisible 方法取消隐藏

说明:所有字段属性,必须要有 getter 和 setter 方法,你可以使用 PhpStorm 快捷键 Alt + Insert (macOS 为 command + N 或 control + enter)根据属性快速生成 getter 和 setter 方法。

若表字段名存在下划线,类属性需以 小驼峰 方式定义。例:字段名为 user_name,则属性应当写为 $userName。

@Id

该注解标签指定成员属性为主键。一个实体类仅能设置一个 @Id 注解标签。

参数说明:

  • incrementing:是否为递增主键,默认为 true

Prop 操作

  • Swoft 版本需 >= 2.0.6

模型支持使用 prop 直接操作,在上方示例实体类中,数据表字段 user_desc 的 prop 为 udesc,Swoft 底层会自动转换,所以并不响应我们使用。

模型常用方法

获取模型方法

$member = new Member($data);
$member = Member::new($data);

模型写入数据库方法

// 调用save()保存
$member = new Member();
$member->setUsername($username);
$member->setPasswd($passwd);
$res = $member->save();
// 调用save()保存,在获取模型的时候填充数据
$member = Member::new($data);
$res = $member->save();
// 调用save()保存,使用fill填充数据
$member = Member::new();
$member->fill($data);
$res = $member->save();
// insertGetId() 保存获取写入数据库返回的id
$res = Member::insertGetId($data);

模型获取数据方法

// 获取所有数据,只获取id、username字段
Member::all(['id','username'])->toArray();
// 获取所有数据,只获取id、username字段
Member::get(['id','username'])->toArray();
// 根据逐渐id获取单条数据
Member::find(1)->toArray();
// 跟all和get相比,更节省内存
Member::chunkById(10,function($member){/** @var Member $m */foreach($member as $m){echo $m->getUsername()."n";}
});

模型更新数据方法

Member::find(1)->update(['passwd' => $passwd]);
// 查找 username 等于 sunny 的记录,替换成 sunnt007,如果记录存在会更新,不存在新增
Member::updateOrCreate(['username'=>'wike'],['username'=>'wikenew']);
// 根据主键id更新数据
Member::modifyById(1,['username'=>'wike']);
// 查找 username 等于 sunny001 的记录,替换成 002
Member::modify(['username'=>'wike'],['username'=>'wikenew']);

删除方法

// 先执行find然后再delete
Member::find(1)->delete() 

聚合查询方法

Member::min('id');
Member::max('id');
Member::sum('id');
Member::avg('id');
Member::count('id');

其他常用方法

来源:https://8code.net/index/index/article/id/60

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要

PHP进阶架构师>>>视频、面试文档免费获取​shimo.im

或 者关注咱们下面的知乎专栏

PHP架构师圈子​zhuanlan.zhihu.com

laravel mysql save 后 查看 受影响行数_swoft2教程系列-mysql模型相关推荐

  1. MySQL 修改时返回受影响行数为 0

    刚刚在测试接口时,修改一直提示提交失败,很奇怪,之前跟移动端联调接口时,也偶尔会出现这样的问题,sql 确定没问题,怎么就提交失败呢?因为是偶尔出现的情况而且不知道怎么复现,就安慰自己说是可能有什么机 ...

  2. mysql受影响的行: 0_mysql执行update语句受影响行数是0

    mybatis连接mysql数据库,发现同一个update执行多次,返回的int值都是1. 我记得同样的update再次执行时 受影响行数是0. 后来发现,我之前一直用的SQLyog是这样子的. 原来 ...

  3. mysql 受影响行数_关于受影响行数的详细介绍

    如何通过SQL聚合函数获得增删改的受影响行数?再做进一步动作前就能够计算出一个查询返回或者影响的行数通常都非常有用,希望分页显示结果或生成统计信息时,这种功能特别方便,那么获取受影响行数的功能是如何实 ...

  4. mybatis之update返回响应条数/受影响行数(如果更新数据与原数据一致则返回0)

    需求:笔者最近有一个需求是这样的,每个机柜每1分钟都会发一个心跳包,这个心跳包的数据如果和mysql数据库存在的数据一样,那么就不要更新了,直接给我返回一个0,我会根据这个0判断要不要存入这个心跳日志 ...

  5. CodeIgniter2.0中sqlserver驱动返回受影响行数问题解决

    最近使用CI写项目时遇到的问题,当使用sqlserve链接操作时 修改和删除返回的受影响行数不对 解决办法如下: 找到ci框架目录中include\database\drivers\sqlsrv\sq ...

  6. SQL返回受影响行数

    ExecuteNonQuery()可以返回delete,insert,update操作受影响的行数 如果执行存储过程ExecuteNonQuery()一直返回-1,应检查存储过程中的是否有SET NO ...

  7. 我纠结的sql返回受影响行数与判断是否成功的问题

    比如:deleteSQLWhere="delete TableA where ID in(1,2,3,4,5)"; try{int i = sqlHelper.ExecuteNon ...

  8. 执行update语句,返回受影响行数为0的几种情况

    首先我们都很清楚执行update语句,返回的结果是受影响的行数这是要先说的, 其次本人遇到执行update语句返回0的情况有两种 1.Update的sql语句中的where条件不成立时,返回结果是0 ...

  9. sql获取受影响行数、插入标识值

    @@ROWCOUNT--受影响行数 @@IDENTITY 和 SCOPE_IDENTITY 可以返回当前会话中的所有表中生成的最后一个标识值.但是,SCOPE_IDENTITY 只在当前作用域内返回值 ...

最新文章

  1. 腾讯云“抢救”微盟!开 766 次在线会议、调拨 100 多台服务器、闹钟只敢定 2 小时...
  2. 首次看清体内所有癌症转移灶,深度学习方法立大功!中国留学生一作论文登《细胞》封面...
  3. SAS 对数据的拼接与串接
  4. SqlServer注意事项总结,高级程序员必背。
  5. HBase timestamp(version)
  6. BCRAN课本命令回顾
  7. linux内存管理简介,Linux操作系统的内存管理特性简介 (3)
  8. C语言天才!想法奇异?还是逼格满满?一份国外C语言写的传奇简历
  9. Qt配置VS2017
  10. 实验15 安装新的int 9中断例程
  11. GitHub热榜第一:中国博士用 ArcGIS Dashboard开发可交互全球疫情地图,登上《柳叶刀》!...
  12. windows中使用mysql配置my.ini时的坑
  13. Junit4.x扩展:运行指定方法
  14. 秋色园QBlog技术原理解析:性能优化篇:读写分离与文本数据库(十八)
  15. ECSHOP二次开发之给商品增加新字段
  16. python 处理xml
  17. 谈谈IT行业的各种证书
  18. 立体匹配 -- PSM-Net 网络模型代码剖析
  19. deepin firewall
  20. Linux下unzip解压文件时报错:End-of-central-directory signature not found.

热门文章

  1. SpringBoot (七) :SpringBoot 整合dubbo
  2. attention seq2seq transformer bert 学习总结 _20201107
  3. 房价预测-paddle 实现
  4. 漫谈Word2vec之skip-gram模型
  5. LeetCode简单题之按奇偶排序数组 II
  6. LLVM语法语义指令特性
  7. Conda安装Glossary词汇表
  8. ML Pipelines管道
  9. 嵌入式传感器是智能移动增长的关键
  10. JAVA课上动手动脑问题2