【发布时间】:2018-07-06 03:12:56
【问题描述】:
我有这个问题:
$models = DB::select(DB::raw("SELECT
Count(collected_items.id) AS total_collected,
///some stuff
FROM collected_items
///some inner joins
WHERE
///Some clauses
GROUP BY collected_items.clause"));
在 laravel 5.5 中,查询构建器返回一个对象数组。
现在我无法循环进入生成的 $models。错误:Cannot use object of type stdClass as array
foreach($models as &$model){
$model['picture'] = '/images/models/' . $model['picture'];
}
你如何得到一个关联数组的数组呢?我以前使用 setFetchMode 来获取它,但这不能再(轻松地)完成,所以我删除了它,现在我正在获取对象。我还可以通过在循环中添加 $model = get_object_vars($model); 来恢复功能:
foreach($models as &$model){
$model = get_object_vars($model);
$model['picture'] = '/images/models/' . $model['picture'];
}
但是我想知道这样做是否正确,或者是否有更好的方法可以使用 eloquent 直接从查询中获取关联数组的数组...
更新
结果:
foreach($models as $i){
print_r($i);
}
是:
stdClass Object
(
[total_collected] => 10
[data] => data
[id] => 218
//...
)
dd($models) 的结果是:
array:1 [
0 => {#327
+"total_collected": 10
+"data": "data"
+"id": 218
//...
}
]
所以结果似乎是一个对象数组。
尝试在查询末尾添加->get();会导致错误:
Call to a member function get() on array
【问题讨论】:
-
->toArray()laravel.com/docs/5.5/… -
已经试过了。不工作。它吐出一个错误。我现在不记得了。
-
你确定它不返回一个数组,有一个类似的查询:i.imgur.com/nDFgIQg.png
-
它返回 stdObj 。这是 laravel 5.5 你的呢?
-
我的是 5.5。你能不能把它转储并发布结果...
dd($models);
标签: arrays laravel collections eloquent