都知道用到foreach($data as $val)迴圈的時候,$data可以是是數組、對象,
但是不解的是明明first(),get()方法獲得的結果都是對象,first()獲得的對象如$data,可以用$data['name']
但是get()獲得的$data不可以,大家懂我的意思嗎?,幫我解惑吧,謝謝了
回複內容:
都知道用到foreach($data as $val)迴圈的時候,$data可以是是數組、對象,
但是不解的是明明first(),get()方法獲得的結果都是對象,first()獲得的對象如$data,可以用$data['name']
但是get()獲得的$data不可以,大家懂我的意思嗎?,幫我解惑吧,謝謝了
假設沒有關聯查詢什麼的,並且結果都轉換成數組形式了(好表達一點~)。
first()獲得的資料是一個一維數組,例如:
$data=[ 'name' => 'zhangsan', 'age' => 20, ...];
這樣的話使用$data['name']
是正確輸出的。
get()獲得的資料是一個二維數組(即使只有1條資料),例如:
$data=[ 0 => [ 'name' => 'zhangsan', 'age' => 20 ... ], ...];
$data
裡可能有多條數組,所以要輸出name的話要$data[0]['name']
,$data[1]['name']
...
foreach的內容可以是對象數組,數組的每個元素都是對象
第一:首先說說foreach
:
foreach ($items as $item){ //這裡面的$items狹義上是一個數組,往外擴可以理解為一個多元素的集合; //樓上說的對象數組就可以理解了 }
第二:first()
和 get()
:
first()
返回的一個Model對象,並且這個對象實現了ArrayAccess介面,所以你可以使用$data['name']這種方式擷取資料
get()
返回的是一個 Model Collection,這裡面的Collection就是集合的意思,你可以簡單理解為對象數組,裡面的每一個元素都是一個Model對象。在使用get()的情況下,哪怕是查詢條件返回一條記錄,也是一個包含一個元素的Collection,而在一個Collection(集合)對象中使用$data['name']
必然會報錯。
以上,學習laravel可以關注我的小站:https://laravist.com
樓上的各位大大已經解釋的很清楚了,實在不能理解,你就理解為就像一維數組和多維陣列的關係,說不定$data[0]['name']
就可以訪問了,可以好好看看PHP的ArrayAccess
laravel orm擷取到的是對象集合.laravel文檔裡有關於集合的介紹和使用.
很簡單,就因為這一行
class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate, Jsonable, JsonSerializable
foreach能用的是數組(array)和集合(collection)
如果不確定 每次在查詢之後 添加 $query->toArray();就行了 就全部都是數組形式的了