首頁  >  問答  >  主體

輸出問題

為什麼$result = Staff::select($where)之後不能直接dump($result->getData()),而非遍歷數組foreach ($result as $value)

Imagine BreakerImagine Breaker2258 天前1626

全部回覆(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
  • 取消回覆