搜索

首页  >  问答  >  正文

输出问题

为什么$result = Staff::select($where)之后不能直接dump($result->getData()),而非要遍历数组foreach ($result as $value)

Imagine BreakerImagine Breaker2275 天前1641

全部回复(6)我来回复

  • jesse

    jesse2018-09-07 22:40:57

    先来个官方截图,证实我的底层源码分析的正确性:

    QQ截图20180907224207.png

    回复
    0
  • Imagine Breaker

    你是怎么发截图的啊,怎么操作的啊? 还有就是视频里不是说select和all返回的是模型对象数组吗?

    Imagine Breaker · 2018-09-08 09:35:52
    Imagine Breaker

    好了,我懂了,不好意思搞反了,谢谢!不过你是怎么插入图片的啊,没看到插入图片选项啊

    Imagine Breaker · 2018-09-08 09:40:13
  • jesse

    jesse2018-09-07 14:49:33

    关于这个问题还有几个方面有待探讨:

    1、既然数据存在data属性中,遍历对象时是怎么确定是data属性并去除其中的数据集的

    2、这个只是Model对象、如果是Collection对象他是怎么实现的呢?

    这两个问题的出现就该ArrayAccess出场了,等晚上回去在更新,让你真正了解对象遍历的底层运作机制。

    回复
    0
  • jesse

    jesse2018-09-07 14:27:18

    首先先看官方手册说明:

    QQ截图20180907141025.jpg

    再看看底层源码:

    QQ截图20180907141312.jpg

    QQ截图20180907141700.jpg

    QQ图片20180907141926.png

    QQ截图20180907142024.jpg

    QQ截图20180907142220.jpg

    官方手册屏蔽许多细节,直接说明结果

    QQ截图20180907142316.jpg

    最后一个问题,为什么返回的结果能进行遍历?

    QQ截图20180907142514.jpg

    QQ截图20180907142446.jpg

    无论是Model类、还是Collection类都实现了同一ArrayAccess接口,这样就能像访问数组一样访问对象中的属性了。

    回复
    0
  • jesse

    因为返回的结果集是对象,所以必须通过数组遍历的方式去取得内部属性的值,其中的data属性即为数据库查询的结果集

    jesse · 2018-09-07 14:31:41
  • 取消回复