Laravel获取请求attributes并存入MySQL JSON字段报错解决
问题解决:将POST JSON中的attributes字段存入MySQL JSON类型字段
问题核心原因
你混淆了两个完全不同的attributes:
$request->attributes是Symfony/Laravel内置的路由参数容器(ParameterBag类型),用来存储路由变量,和你POST的JSON数据里的attributes字段毫无关系;- 你需要读取的是请求体JSON中的
attributes字段,但当前代码错误地获取到了路由参数容器,导致赋值时出现类型转换错误。
具体解决方案
1. 确保请求格式正确
发送POST请求时,必须设置请求头:
Content-Type: application/json
Laravel只有识别到这个头,才会自动解析请求体的JSON数据。
2. 正确提取JSON中的attributes字段
不要用$request->attributes,改用以下方式获取请求体里的目标字段:
// 方法1:通过Request实例直接提取 $attributes = $request->input('attributes'); // 方法2:获取完整的请求体JSON数组 $data = $request->json()->all(); $attributes = $data['attributes'];
3. 修正保存代码
Laravel支持直接将数组/关联数组赋值给JSON类型字段,会自动完成序列化:
// 假设已注入Request实例 public function store(Request $request) { $data = $request->json()->all(); $post = new Post(); $post->title = $data['title']; $post->description = $data['description']; $post->target_price = $data['target_price']; $post->date_of_availability = date("Y-m-d", strtotime($data['date_of_availability'])); $post->condition = $data['condition']; $post->latitude = $data['latitude']; $post->longitude = $data['longitude']; // 正确赋值JSON字段 $post->attributes = $data['attributes']; $post->save(); }
4. 额外优化:模型字段类型强制转换
在Post模型中添加$casts属性,强制attributes字段以数组形式处理,避免类型错误:
class Post extends Model { protected $casts = [ 'attributes' => 'array', ]; }
这样无论你传入数组还是JSON字符串,Laravel都会自动完成序列化/反序列化。
内容的提问来源于stack exchange,提问作者nick coder
相关产品推荐
相关产品推荐

