gpt4 book ai didi

php - Laravel Eloquent 捕获特定异常

转载 作者:行者123 更新时间:2023-12-04 02:09:08 25 4
gpt4 key购买 nike

我目前正在尝试以下操作:在我的数据库中,我有一个名为 templateURL 的列,这是一个唯一的键,所以它可能只存在一次。然后,如果有东西试图提交一个表单,这与已经存在的表单相同,则会抛出一个错误,说Integrity constraint violation: 1062 Duplicate entry for key 'templateURL' .

当然可以,这就是为什么我让专栏独一无二。但是:我想要的不是默认的 Laravel 错误,而是返回到仍然输入值的表单和一条消息(例如来自 Bootstrap 的警报或输入字段旁边的一个 div)说这已经存在并要求选择另一个。所以我需要捕捉这个异常并做一些自定义的事情。我怎样才能达到我想要的?

最佳答案

您必须将数据库操作包装到 try-catch阻止并捕获错误并在遇到错误时执行其他操作,可能会使用带有错误消息的旧输入数据进行重定向。

duplicate entry 的错误代码是 1062 .因此,如果您得到 1062 作为错误代码,则表示此数据是重复条目。这是捕获此异常的代码。

try {

$data = Model::create(array(
'templateURL' => 'some value ',
));

} catch (Illuminate\Database\QueryException $e) {
$errorCode = $e->errorInfo[1];
if($errorCode == 1062){
// we have a duplicate entry problem
}
}

或者如果你不想自己处理异常,你可以求助于 Laravel Validator。就像在你的 Controller 中跟随
// validation rules
$rules = array(
'templateURL' => 'unique:YourTableNameHere'
);

$validator = Validator::make(Input::all(), $rules);

// check if the validation failed
if ($validator->fails()) {

// get the error messages from the validator
$messages = $validator->messages();

// redirect user back to the form with the errors from the validator
return Redirect::to('form')
->withErrors($validator);

} else {

// validation successful

$data = Model::create(array(
'templateURL' => 'some value ',
));
}

然后在您的 View 模板中,您可以通过 $errors 访问错误消息。多变的。
在此处了解有关验证的更多信息 https://laravel.com/docs/5.3/validation

关于php - Laravel Eloquent 捕获特定异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40492436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com