我在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;
}
该代码刚刚从codeigniter更改为laravel,因为在codeigniter中,在foreach
语句中传递新键和值没有问题
但是当我在laravel中尝试时,我得到了以下错误:
间接修改Illuminate\Support\Collection
的重载元素不起作用
653,数组('查询' =〉对象(集合),'行' =〉数组('促销横幅标识' =〉1,'促销链接' =〉' http://localhost/deal/home/voucher ','关于促销' =〉'),'键' =〉0))
请指导我如何解决此问题
谢谢你(:
5条答案
按热度按时间bybem2ql1#
Laravel查询的结果永远是a Collection。若要将属性加入此集合中的所有对象,您可以使用
map
函数。此外,您可以使用实际的对象属性而不是数组键来获取和设置属性。在我看来,这使代码的可读性强得多。
93ze6v8z2#
对于其他需要解决方案的人可以使用jsonserialize方法来修改集合.例如:
jdzmm42g3#
问题是
get
返回stdObject
的collection
请修改所返回内容的模型,而不是将新字段添加到查询结果中。
因此,假设您的
app
目录中有一个PromotionBanner.php模型文件,编辑它,然后添加以下两个代码块:这里你刚刚添加了自定义字段。2现在你告诉模型如何填充它:
现在,您可以通过模型获得横幅:
现在您可以在结果中访问
promotionImage
属性P.D:如果你没有使用模型...那么,只需创建文件app\PromotionImage.php:
sg3maiej4#
只是在需要在查询中传递数据时进行改进
zzzyeukh5#
我整晚都在纠结这个问题,但我还是不知道我的问题出在哪里.
我已经使用
->get()
来实际执行查询,并且我已经在数据上尝试了->toArray()
和->jsonserialize()
,但它没有解决问题。最后,我找到的解决方法是:
使用
json_encode
,然后再次使用json_decode
,将它从阻止我编辑它的任何东西中释放出来。这充其量是一个笨拙的变通办法,但如果其他人只是需要克服这个问题,继续他们的工作,这可能会为您解决问题。