TP5.0循環賦值時出現Indirect modification of overloaded element of think\Collection has no effect

問題

當你使用foreach遍歷數據庫裏查詢出來的代碼的時候是否遇到過這個問題?
如下代碼爲例:

$data=Db::name("data")->select();
foreach($data as $k => $v){
	$data[$k]['colum']=1;
}

如果你在TP5中使用上述代碼,你將會遇到這個錯誤。爲什麼呢?

分析

我們可以var_dump一下$data查看一下:
···
object(think\Collection)[16]
protected ‘items’ =>
array (size=3)

···
這明顯是個對象,應該是能夠遍歷但是不能直接爲其賦值。那麼問題就比較好解決了。

解決方案

將上述代碼改爲:

$data=Db::name("data")->select()->toArray();
foreach($data as $k => $v){
	$data[$k]['colum']=1;
}

將數據庫查詢結果轉換爲數組即可啦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章