ActiveRecord 中的 limit(1) 与 one() [ 2.0 版本 ]
$data = User::find()
->where(['id' => 100])
->select('name')
->limit(1)
->one();
请问上面的,如果写了 one()
是不是就包含了 limit(1)
?
共 4 个回答
-
return19931112 回答于 2018-11-21 17:22 举报
可以这么理解,
one()
方法本质是从取出的多条记录中取出第一条public function one($db = null) { $row = parent::one($db); if ($row !== false) { $models = $this->populate([$row]); return reset($models) ?: null; } return null; }
-
one()就像它的名字一样,返回一条记录,它是yii2框架自己的语法;
limit是mysql数据库特有的语法,都是查询一条记录。
既然一个是框架的语法,一个是数据库的语法,所以它们各自在自己的世界毫不冲突地生活着。
one()的确是返回一条记录,这一点和limit(1)算是巧合了。但是这条记录一般是一维的,可以是一个AR模型或者普通对象。如果加上了asArray(),那么就是类似["name"=>"liushifu",'age'=>'66','sex'=>'man','hobby'=>'women']这样的。
limit是mysql数据库上的语法。可以取得范围的记录,比如limit(2,3)。limit(1)是常用的,返回一条记录。如果你不用one()而是使用了all()方法。$data = User::find() ->where(['id' => 100]) ->select('name') ->limit(1) ->all();//one()替换
那么它返回数组,但是它的格式是一个二维数组,是一个对象组成的数组。类似
$data[0]["name"=>"liushifu",'age'=>'66','sex'=>'man','hobby'=>'women'];
所以,我觉得他俩最大的区别就是格式问题,一个返回二维,一个返回一维的。
至于返回的这个【第一条】如何定义,什么范围limit(2,3),排序orderby等等的,都交给数据库语法来完成,确定好之后,如果是一维数据就用one(),二维数据就用all()。
咋样,明白不?baiyi233 觉得很赞
xyf90314
注册时间:2015-03-04
最后登录:2023-03-13
在线时长:95小时23分
最后登录:2023-03-13
在线时长:95小时23分
- 粉丝21
- 金钱5257
- 威望40
- 积分6607