【问题标题】:laravel 5.5 returns array of stdObj from DB::select(DB::raw(""));laravel 5.5 从 DB::select(DB::raw("")) 返回 stdObj 数组;
【发布时间】: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


【解决方案1】:

据我所知,Eloquent 真的希望你使用对象语法:

 $i->total_collected;

而不是使用数组。当我想使用数组时,您使用 get_object_vars() 是我解决这个问题的方式......而且我从来没有找到任何“标准”原因说明这不是好的,或者是解决这个问题的正确方法的另一个最佳实践。所以你可以做

$this_row_array = get_object_vars($i);
$this_row_array['total_collected'];

据我所知,这是完全合法的。

随着 Eloquent 变得越来越聪明,这种类型的答案可能会黯然失色,但鉴于您的问题针对 5.5,我认为您已经有了正确的答案。

HTH,

-FT

【讨论】:

    猜你喜欢
    • 2017-11-17
    • 2018-10-24
    • 2015-10-27
    • 2019-11-23
    • 2015-03-26
    • 2021-07-29
    • 2021-06-04
    • 2019-01-10
    • 2019-08-20
    相关资源
    最近更新 更多