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

如何在Laravel的Seeder中为JSON类型ibans字段写入银行名称和IBAN数据

Laravel Seeder写入JSON类型字段的正确实现方法

核心错误原因

  • 当前代码传入json_decode的字符串不是合法JSON格式,缺少外层{}包裹,解析后直接返回null,导致字段写入失败
  • 直接使用DB门面操作数据表时,不会自动将PHP数组序列化为JSON字符串,需要手动处理

正确实现方案

方案1:直接使用DB门面写入(无需修改其他代码)

直接构造符合业务需求的PHP数组,再用json_encode转为合法JSON字符串即可,示例代码如下:

public function run()
{
    DB::table('settings')->insert([
        'name' => 'Şirket Ünvanı',
        'account_type' => 'settings',
        // 先构造银行名称与对应IBAN的数组,再转为JSON字符串
        'ibans' => json_encode([
            '工商银行' => 'IBAN12345678901234',
            '建设银行' => 'IBAN98765432109876'
            // 可按需求添加更多银行与对应IBAN信息
        ], JSON_UNESCAPED_UNICODE), // 该参数避免中文被转义
        'created_at' => now(),
        'updated_at' => now(),
    ]);
}

方案2:使用模型自动转换(更规范的Laravel写法)

  1. 首先创建对应的Setting模型,在模型中添加$casts属性指定ibans字段为数组类型,Laravel会自动在读写时完成JSON和数组的互转:
// app/Models/Setting.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Setting extends Model
{
    protected $fillable = [
        'name',
        'account_type',
        'ibans'
    ];

    protected $casts = [
        'ibans' => 'array' // 指定JSON字段自动转为数组处理
    ];
}
  1. 然后Seeder中直接调用模型的create方法传数组即可:
use App\Models\Setting;

public function run()
{
    Setting::create([
        'name' => 'Şirket Ünvanı',
        'account_type' => 'settings',
        // 直接传数组即可,Laravel会自动转JSON存储
        'ibans' => [
            '工商银行' => 'IBAN12345678901234',
            '建设银行' => 'IBAN98765432109876'
        ],
        'created_at' => now(),
        'updated_at' => now(),
    ]);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:54:02