在Laravel框架中如何将JSON对象数据存储到MySQL数据库
实现步骤
第一步:创建对应数据表的Eloquent模型
先在app/Models目录下创建Name.php模型文件,代码如下:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Name extends Model { // 开放name字段的批量赋值权限 protected $fillable = ['name']; // 显式指定对应数据表,符合命名规范的情况下可以省略 protected $table = 'names'; }
第二步:修改MainController的data方法
替换原有控制器逻辑,加入参数验证、批量插入逻辑,修改后代码如下:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Name; // 引入Name模型 use Illuminate\Support\Facades\Validator; // 引入验证器 class MainController extends Controller { function data(Request $request) { // 验证提交的参数格式是否符合要求 $validator = Validator::make($request->all(), [ '*.name' => 'required|string|max:255' ]); if ($validator->fails()) { return response()->json([ 'code' => 400, 'msg' => '参数格式错误', 'errors' => $validator->errors() ], 400); } // 格式化插入数据,自动填充时间字段 $insertData = collect($request->all())->map(function ($item) { return [ 'name' => $item['name'], 'created_at' => now(), 'updated_at' => now() ]; })->toArray(); // 批量插入数据,性能远高于循环单条插入 Name::insert($insertData); return response()->json([ 'code' => 200, 'msg' => '数据批量保存成功', 'save_count' => count($insertData) ]); } }
第三步:AJAX请求注意事项
- Laravel POST路由默认开启CSRF校验,需要在AJAX请求头中携带
X-CSRF-TOKEN参数,值可以从页面的csrf-tokenmeta标签中获取,示例JS代码如下:
// 页面meta标签提前写入:<meta name="csrf-token" content="{{ csrf_token() }}"> $.ajax({ url: 'http://127.0.0.1:8000/data', type: 'POST', contentType: 'application/json', headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, data: JSON.stringify(/* 你需要提交的JSON数组 */), success: function(res) { console.log(res); }, error: function(err) { console.error(err); } });
- 如果是跨域请求,需要额外配置Laravel的CORS跨域中间件放行该接口。
内容的提问来源于stack exchange,提问作者Dhruv
相关产品推荐
相关产品推荐

