2017-04-09 18:40:49 4927次浏览 3条回答 0 悬赏 20 金钱

如何获取部分字段?
举个栗子:User表内,我只想知道createTime > 1491734306的id,而不需要其他字段。

顺便向老司机请教:我听说效率最高的方式是获取“我需要的字段”,而非整条。

目前所知道的所有Find方法,都只能得到整条数据。

是我了解的信息有误,还是Yii2没有对这方面做“效率考量”?

最佳答案

  • ╃巡洋艦㊣ 发布于 2017-04-09 19:21 举报

    如果想获取某几个字段,用如下方式:

    User::find()->select('id, createTime');
    
    1 条回复
    回复于 2017-04-10 08:36 回复

    还可以 asArray

    User::find()->select('id, createTime')->asArray(true) // 一般既然只读指定字段,那么估计relation之类AR的功能都会不会使用了。
    

    算是锦上添花了,另外舰长早上好。

  • 回答于 2017-04-09 20:12 举报

    如楼上所言。
    这些都是基础的东西,yii怎会没有考虑到。
    基础文档啥的,还是要先看一看的。
    http://www.yiichina.com/doc/guide/2.0/db-query-builder

  • 回答于 2018-06-29 18:18 举报

    asArray()->all()好像还是不太完美,因为涉及连接表的字段的话,就会以数组下标形式存在
    比如主表是A,某些信息需要连接表B来查,那么代码类似这样:
    $retArr = A::find()->select(['A.name','A.age','B.school'])->joinWith('B')->filterWhere(['dddd'=>[$a,$b])->asArray()->all();

    这样的数组$retArr信息除了'name','age','school'之外,还有一个'B'为下标的子数组,这个数组就是多余的

    2 条回复
    回复于 2019-01-07 16:30 回复

    悄悄的告诉你 joinWith第二个参数 给个false

    回复于 2019-01-10 09:56 回复

    太棒了,一直没有关注这个参数。一语中的!

您需要登录后才可以回答。登录 | 立即注册
狼骑舞者
助理

狼骑舞者

注册时间:2016-02-05
最后登录:2018-12-20
在线时长:10小时36分
  • 粉丝3
  • 金钱69
  • 威望0
  • 积分169

热门问题