查询

查询一行

  • get($where, $returnAsArray = false)
  • findOne(where) 等同于等价的get($where, true)

查询多行

  • all($where, $returnAsArray = false)
  • select(where) 等同于等价的all($where, true)
  • findAll(where) 等同于等价的all($where, true)

返回值说明

  • get返回的是一个 EasySwoole\ORM\AbstractModel 实例,可以复用进行模型的其他操作 当没有查询结果时返回 null
  • findOne返回的是一个数组
  • all返回的是一个数组,里面的每一个元素都是 EasySwoole\ORM\AbstractModel 实例
  • selectfindAll方法返回的是一个二维数组,没有查询结果时返回null

多种传参方式

在以上方法列表中,最重要的是$where参数,可以实现多种使用方式

  1. // 通过主键
  2. $res = UserModel::create()->get(1);
  3. // 通过key=>value 数组
  4. $res = UserModel::create()->get([
  5. 'u_id' => 1,
  6. 'u_state' => 0,
  7. 'is_vip' => 1
  8. ]);
  9. // 通过闭包方式,构造复杂的sql
  10. // 这是一种很强大灵活的方式,闭包的参数是一个mysqli组件的查询构造器,可以调用所有连贯操作
  11. // http://www.easyswoole.com/Components/Mysqli/builder.html
  12. $res = UserModel::create()->get(function(QueryBuilder $queryBuilder){
  13. $queryBuilder->where('u_state', 1);
  14. $queryBuilder->where('age', 12, '>');// 各种特殊操作符 between like != 等等都可以完成
  15. $queryBuilder->order('u_id');
  16. });
  17. // 连贯操作,继续可以往下查看ORM的文档
  18. $res = UserModel::create()->where('u_id', 1)->get();

分页

limit和withTotalCount,获取分页列表数据以及总条数。

下面模拟获取分页列表数据,page为页码,limit为每页显示多少条数。

  1. $page = 1; // 当前页码
  2. $limit = 10; // 每页多少条数据
  3. $model = AdminModel::create()->limit($limit * ($page - 1), $limit)->withTotalCount();
  4. // 列表数据
  5. $list = $model->all(null, true);
  6. $result = $model->lastQueryResult();
  7. // 总条数
  8. $total = $result->getTotalCount();

快速查询

获取查询结果某一列的值,如果 $column 为空,则会返回查询结果的第一列

  • column(?string $column = null): ?array

获取查询结果某一列第一行的值,如果 $column 为空,则会返回查询结果的第一列第一行的值

  • scalar(?string $column = null): ?array

获取结果并使用某一列的作为索引

  • indexBy(string $column): ?array
  1. $nameList = UserListModel::create()->column('name');
  2. /*
  3. 会返回类似这样的数组
  4. [
  5. 'tom',
  6. 'tony',
  7. 'alex'
  8. 'ben'
  9. ]
  10. */
  11. $name = UserListModel::create()->scalar('name');
  12. $age = UserListModel::create()->limit(1)->scalar('age');
  13. /*
  14. 会返回单个值
  15. $name = 'tom';
  16. $age = 12;
  17. */
  18. $userList = UserListModel::create()->indexBy('age');
  19. /*
  20. 会返回类似这样的数组
  21. [
  22. '12' => [
  23. 'tom',
  24. 'tony'
  25. ],
  26. '13' => [
  27. 'alex',
  28. ]
  29. '14' => [
  30. 'ben',
  31. ]
  32. ]
  33. */

columnscalarindexBy 这三个方法都是对 all 方法的封装。 scalar 方法只是返回查询结果当中的某一列第一行的值, 条件语句中不会自动加上 LIMIT 1 条件。 columnscalarindexBy 这三个方法在获取数据失败时会返回 null ,获取数据失败时不一定查询失败,也可能返回的数据里没有对应的列名