Laravel开发REST API时如何向MySQL数据库存入数组格式数据
Laravel 数组格式商品账单数据入库实现步骤
1. 修正数据库迁移文件
首先根据你使用的数据库调整字段类型:
- 若使用MySQL等不支持原生数组类型的数据库,将
productinvoice字段类型改为json - 若使用PostgreSQL等支持原生数组的数据库,可保留
array类型
// 2021_09_25_075455_create_productdetails_table.php public function up() { Schema::create('productdetails', function (Blueprint $table) { $table->id(); $table->string('productname'); $table->string('productid'); $table->string('productdescription'); $table->string('productimage'); // 按$fillable配置补全缺失的字段 $table->json('productinvoice'); // 替换原array类型,适配绝大多数数据库场景 $table->timestamps(); }); }
修改完成后执行迁移命令:php artisan migrate:fresh(注意该命令会清空现有数据,仅测试环境使用,生产环境请新建迁移文件修改字段)
2. 给模型添加数组类型转换
Laravel 提供了内置的类型转换功能,会自动完成PHP数组与数据库JSON/array字段的双向转换,不需要手动做json_encode/json_decode处理。
在productdetails模型中添加$casts属性:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class productdetails extends Model { use HasFactory; protected $fillable = ['productname', 'productid', 'productdescription', 'productimage', 'productinvoice']; // 新增类型转换配置 protected $casts = [ 'productinvoice' => 'array', ]; }
3. 调整控制器验证规则
因为productinvoice是数组类型,你可以根据需要补充数组内部字段的验证规则:
// ProductdetailsController.php 的 store 方法中 public function store(Request $request) { $request->validate([ 'productname' => 'required', 'productid' => 'required', 'productdescription' => 'required', 'productimage' => 'required', 'productinvoice' => 'required|array', // 声明为数组类型 // 可选:验证数组内每个子项的字段规则 'productinvoice.*.productquantity' => 'required|numeric', 'productinvoice.*.productprice' => 'required|numeric', 'productinvoice.*.productgst' => 'required|numeric', 'productinvoice.*.productname' => 'required|string', ]); return productdetails::create($request->all()); }
修改完成后即可正常提交数组格式的productinvoice数据,入库和读取都会自动处理格式转换:
- 提交时直接传数组结构即可,Laravel会自动转成JSON存入数据库
- 读取数据时,
productinvoice字段会自动转为PHP数组,可直接遍历操作
内容的提问来源于stack exchange,提问作者Amit Paple
相关产品推荐
相关产品推荐

