You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.6中如何让Save()方法正确返回True或False?

解决你的注册方法总是返回false的问题

嘿,我明白你遇到的困扰了——你的注册方法现在不管字段内容是否合规,都一个劲返回false,核心原因是Laravel的Eloquent模型在字段验证失败(比如长度超出限制)时,默认不会抛出异常,只是返回false,所以你的try/catch根本抓不到这种验证错误,而代码在try块结束后又没有返回true的逻辑,最后函数默认就返回false了。

下面给你两种可行的解决方案,按需选择:

方案一:手动添加验证(更灵活可控)

在保存数据前先手动验证字段是否符合规则,和数据库的约束对齐,这样能提前拦截错误,避免走到数据库层面:

public function register() {
    $user = new User;
    $user->fields = 'example';
    $user->fieldWithError = 'Example exceeds characters DB';

    // 定义验证规则,和数据库字段的长度限制严格匹配
    $validator = \Illuminate\Support\Facades\Validator::make(
        $user->getAttributes(),
        [
            'fieldWithError' => 'required|max:10', // max:10对应数据库的string(10)
            // 可以在这里补充其他字段的验证规则
        ]
    );

    // 如果验证失败,直接返回false
    if ($validator->fails()) {
        return false;
    }

    try {
        // 验证通过后尝试保存,成功返回true,失败返回false
        return $user->save();
    } catch (\Exception $e) {
        // 处理数据库连接、权限不足这类意外异常,同样返回false
        return false;
    }
}

方案二:利用Eloquent模型的自动验证(更简洁)

如果你已经给User模型配置了验证规则(比如使用ValidatesWhenCreating trait,或者在模型里定义$rules属性),可以直接简化代码:

public function register() {
    $user = new User;
    $user->fields = 'example';
    $user->fieldWithError = 'Example exceeds characters DB';

    try {
        // save()会自动触发模型验证,成功返回true,验证失败返回false
        return $user->save();
    } catch (\Exception $e) {
        // 捕获非验证类的异常,比如数据库连接错误
        return false;
    }
}

关键逻辑说明

  • 原代码总是返回false的本质:当字段长度不符合要求时,save()仅返回false,不会抛出异常,所以不会进入catch块;而try块执行完后没有任何return语句,函数默认返回false。
  • 验证规则要和数据库约束保持一致(比如max:10对应数据库的string('fieldWithError', 10)),这样能在应用层提前拦截错误,减少数据库层面的无效操作。
  • try/catch在这里的作用是处理非验证类的意外异常,比如数据库连接失败、权限不足等,而不是字段验证错误。

内容的提问来源于stack exchange,提问作者Helder Ferrari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:48:10