间接修改Illuminate\Support\Collection的重载元素没有效果

Kel*_*vin 6 database laravel

我在 Laravel 框架中很新,我来自 codeigniter。

我想从数据库中添加新的键和值

static function m_get_promotion_banner(){
    $query = DB::table("promotion_banner")
        ->select('promotion_banner_id','promotion_link','about_promotion')
        ->where('promotion_active','1')
        ->get();
    if($query != null){
        foreach ($query as $key => $row){
            $query[$key]['promotion_image'] = URL::to('home/image/banner/'.$row['promotion_banner_id']);
        }
    }
    return $query;
}
Run Code Online (Sandbox Code Playgroud)

该代码刚刚从 codeigniter 更改为 laravel,因为在 codeigniter 中,在foreach语句中传递新的键和值没有问题

但是当我在 Laravel 中尝试时,出现以下错误:

间接修改重载元素的Illuminate\Support\Collection无效

at HandleExceptions->handleError(8, 'Illuminate\Support\Collection 的重载元素的间接修改无效', 'C:\xampp\htdocs\laravel-site\application\app\models\main\Main_home_m.php', 653,数组('查询' => 对象(集合),'行' => 数组('promotion_banner_id' => 1,'promotion_link' => ' http://localhost/deal/home/voucher ','about_promotion' => ''), 'key' => 0))

请指导我如何解决这个问题

谢谢你 (:

Jer*_*dev 8

Laravel 查询的结果将始终是一个 Collection。要将属性添加到此集合中的所有对象,您可以使用该map函数。

$query = $query->map(function ($object) {

    // Add the new property
    $object->promotion_image = URL::to('home/image/banner/' . $object->promotion_banner_id);

    // Return the new object
    return $object;

});
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用实际对象属性而不是数组键来获取和设置属性。在我看来,这使代码更具可读性。


小智 6

对于需要解决方案的其他人,您可以使用 jsonserialize 方法来修改集合。例如:

$data = $data->jsonserialize();
//do your changes here now.
Run Code Online (Sandbox Code Playgroud)