1.  日常难题记录:tp6 中的saveAll()的使用方法
    控制器代码:
$Lay =new OddlayModel;
$res=$Lay->saveAll(input(‘post.’));//使用函数助手input(‘post.’)//一次传过来好多input表单值
return json_ok($res);//return $res数据

API测试方式:

70ce6bdbb2254e62abf37a4b747931f1.png

当我们使用前端提交时,报500的错。查看具体时,错误代码为:

Argument 1 passed to think\Model::setAttr() must be of the type string, intXXXX

苦思冥想,前端不能用这批量写了也没用。。。。。

直到在后来在看文章时看到有个大佬时这样写的,给了我启发:

a6421f0bb0a747c18fbf2d1d8f0490e9.png

虽然报的错不一样,但是我们也可以直接强制把前端传过来的数据强制转换为数组(虽然我们接收的就是数组,强制转换最保险)

所以,我们把代码改进一下:


  1. $Lay =new OddlayModel;//使用函数助手input(‘post.’)//一次传过来好多input表单值 //接收数组,但是前端传过来报500错
  2. $res=$Lay->saveAll(input(‘post.res/a’));//res/a强制转换数组前端正常传
  3. return json_ok($res);//return $res数据

APIpost工具提交的格式也相应改一下,如下的格式:

d02aa2a869fe4db3a9af8cf29424c22a.png

然后前端测试提交数组,成功提交到数据库,到此可以愈快下班回家干饭了;

最后贴一下控制器的完整代码:


<?php
declare (strict_types=1);
namespace app\controller\admin;
use app\controller\admin\Base;
use app\traits\ControllerTrait;
use think\annotation\route\Group;
use think\annotation\Route;
use app\model\Oddlay as OddlayModel;//模型重命名
/**
* Class Oddlay
* @package app\controller\admin
* @Group(“admin/Oddlay”)
*/
class Oddlay extends Base
{
use ControllerTrait;
/**
* 测试费用批量保存–没问题
* @Route(“gettestt”, method=”POST”)
* 数据格式
*
*/
//使用注解路由 @Route(“gettestt”, method=”POST”)
public function gettestt(){
$Lay =new OddlayModel;//使用函数助手input(‘post.’)//一次传过来好多input表单值 //接收数组,但是前端传过来报500错
$res=$Lay->saveAll(input(‘post.res/a’));//res/a强制转换数组前端正常传
return json_ok($res);//return $res数据
//返回数组
// dump($res);
}