You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel插入数组到数据库时报array to string conversion错误如何解决?

错误原因

你将PHP数组直接赋值给了Notification模型的link属性,而数据库中对应的link字段为字符串类型(varchar/text等),Laravel Eloquent默认不会自动完成数组到合法字符串的转换,执行save()方法时PHP尝试直接将数组转为字符串就会触发array to string conversion错误。

解决方法

推荐优先使用Laravel原生的类型转换功能,两种可选方案:

方案1:使用模型$casts属性(官方推荐)

这个方案可以实现自动转换,存数据时自动把数组转成JSON字符串写入数据库,读取数据时自动把JSON转回数组使用:

  1. 先确认数据库notifications表的link字段类型为json或者longText,如果是迁移文件的话写法如下:
// 通知表迁移文件对应字段写法
$table->json('link'); // 优先用json类型,兼容性和查询效率更好
// 也可以使用 $table->longText('link');
  1. 在Notification模型中添加$casts属性配置:
class Notification extends Model
{
    // 其他已有属性、方法保留

    protected $casts = [
        'unread' => 'boolean', // 可顺便为布尔类型字段加转换,保证读取时数据类型正确
        'link' => 'array', // 配置link字段自动在数组和JSON之间转换
    ];
}

配置完成后原有业务代码不需要做任何修改,直接执行即可正常保存数据。

方案2:手动序列化数组

如果你不想修改模型配置,可以手动把数组转为JSON字符串后再赋值:

// 将原来的 $notif->link = $link; 替换为下面的写法
$notif->link = json_encode($link);
$notif->save();

// 后续读取该字段使用时,手动转回数组即可
$linkArray = json_decode($notif->link, true);

内容的提问来源于stack exchange,提问作者Ardhillah Alfath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:57:03