adadada_da 2024-04-02 09:18 采纳率: 50%
浏览 2
已结题

Laravel ORM save

Laravel ORM save 方法数据未修改原因解析?

laravel orm调用save方法,该方法未操作事务,$param里面也是有值的,在新增的时候,调用save方法,状态返回的是true,但是数据没有新增/修改到数据库,返回成功使用这种方法

DB::enableQueryLog();
$back = $this->model->save($param);
$queries = DB::getQueryLog();
dd($queries);
打印出来是个[],是我哪里操作有问题吗
代码如下

class UserPupilService extends BaseService
{
    /**
     * 构造函数
     */
    public function __construct()
    {
        $this->model =  G(UserPupilModel::class);
    }

    /**
     * 新增数据
     * @return bool
     */
    public function saveData($params)
    {
        // 删除多余字段
        unset($params['type']);

        $back = false;
        // 通过用户Id检索不存在则创建一个实例
        $info = $this->getPupilInfo(array('user_id' => $params['user_id']));
        if(!$info){
            // 加入主键Id
            $params['id'] = G(SnowFlake::class)->createId();
            $params['create_time'] = date('Y-m-d H:i:s');
            $back = $this->model->save($params);

        }else{
            //$arr = $info->toarray();
            // 数据查重
            $array_diff_assoc = array_diff_assoc($params, $info->toArray());
            // 加入修改时间
            $array_diff_assoc['update_time'] = date('Y-m-d H:i:s');
            // 修改数据信息(第一中写法)
            //foreach ($array_diff_assoc as $k => $val){
                //$info->$k = $val;
            //}
            //$back = $info->save();
            // 第二种写法
            $back = $info->fill($array_diff_assoc)->save();
            var_dump($back);
        }

//        return $back;
    }

    /**
     * 获取认证记录信息
     *
     * @param array $where
     * @return mixed
     */
    public function getPupilInfo(array $where)
    {
        return $this->model
            ->selectRaw('user_id, real_name, unit_school, specialty, education, enrollment_year')
            ->where($where)
            ->first();
    }

}

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-02 09:18
    关注

    引自免费微信小程序:皆我百晓生

    好的,让我详细解释一下如何解决这个问题。

    首先,你需要检查save方法是否真的在进行事务操作。确保你在调用save方法之前开启了事务,或者在方法中已经提交了事务。如果没有开启事务,那么这个方法将会无限制地运行,而不会影响后续的数据库操作。

    然后,你需要检查 $param 是否是有效的参数。在这个例子中,$param 是一个字符串数组,应该包含一些与你要插入的数据相关的键。然而,你没有提供足够的信息来确定这些键是否都包含了你想要插入的数据。

    为了增加安全性,你可能需要添加一些额外的验证步骤。例如,你可以要求用户输入所有必要的键,或者对所有数据进行预处理,例如检查所有键是否存在并填充相应的值。

    如果你仍然不确定应该如何解决这个问题,或者你觉得问题非常复杂,你可以尝试向我提问更多的细节,我会尽力为你提供帮助。同时,如果你正在寻找其他的技术解决方案,我很愿意提供帮助。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月10日
  • 已采纳回答 4月2日
  • 创建了问题 4月2日

悬赏问题

  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)
  • ¥20 web页面如何打开Outlook 365的全球离线通讯簿功能
  • ¥15 io.jsonwebtoken.security.Keys
  • ¥15 急,ubuntu安装后no caching mode page found等
  • ¥15 联想交换机NE2580O/NE1064TO安装SONIC
  • ¥15 防火墙的混合模式配置