Laravel 4:向从数据库中检索的数组(对象)添加额外的键/值对

时间:2014-12-14 14:37:37

标签: laravel laravel-4

我想知道是否有人可以帮助我,因为我开始在这里感到沮丧...我有一个数据库表,其中包含与图像有关的信息。一列是'文件名'。检索完图像数组后,我想在数组中添加一个名为“filepath”的额外密钥,格式为'/path/to/images' . array[$i]['filename']

足够简单吧?但我似乎无法做到(没有使用一些荒谬冗长的代码)。这就是我所拥有的:

    $array = DB::table('tour_images')->where('tour_id','=',$tourID)->get();
    $images = $array;
    $i = 0;
    foreach($array as $img){
        $images[$i]['filepath'] = '/upload/tour_images/' . $img['file_name'];
        $i++;
    }

但我得到'不能使用stdClass类型的对象作为数组'我想这是因为第一行代码返回对象而不是数组,对吗?所以我尝试使用:

$array = DB::table('tour_images')->where('tour_id','=',$tourID)->get()->toArray();

猜猜是什么,它不起作用。好的,有人现在帮助我,请...

编辑:从上面返回错误:'在非对象上调用成员函数toArray()'

2 个答案:

答案 0 :(得分:0)

我个人只会使用这些对象。像那样:

$images = DB::table('tour_images')->where('tour_id','=',$tourID)->get();
foreach($images as $i => $img){
    $images[$i]->src = '/upload/tour_images/' . $img->file_name;
}

您也可以将其转换为数组。 toArray()不起作用,因为它是一个普通对象数组,但将其转换为数组应转换它。无论如何,您必须为结果集中的每一行执行此操作。

$results = DB::table('tour_images')->where('tour_id','=',$tourID)->get();
$images = array();
foreach($results as $result){
    $img = (array) $result;
    $img['filepath'] = '/upload/tour_images/' . $img['file_name'];
    $images[] = $img;
}

答案 1 :(得分:0)

我认为$images是一个数组,但$img是一个stdClass

因此,您应该使用->来引用它的属性

如下所示:

$images = DB::table('tour_images')->where('tour_id','=',$tourID)->get();

foreach($images as $img) {
    $img->filepath = '/upload/tour_images/' . $img->file_name;
}