这是我的模型代码试图处理duplicate entries
:
$userData = ['name' => $name, 'email' => $email, 'password' => $password];
public function addUser($userData) {
try {
DB::table('users')->insert($userData);
} catch (QueryException $e) {
$errorCode = $e->errorInfo[1];
if($errorCode == 1062){
throw ('Duplicate Entry');
}
}
}
调用控制器代码如下:$userModel->addUser($userData);
此处我不打算打印从model
收到的任何回复。
获取错误:
我做错了什么?如何正确处理异常以及这样做的最佳做法是什么?
答案 0 :(得分:1)
你应该试试这个:
public function addUser($userData)
{
try {
DB::table('users')->insert($userData);
} catch (Illuminate\Database\QueryException $e){
$errorCode = $e->errorInfo[1];
if($errorCode == 1062){
return 'Duplicate Entry';
}
}
}
有关详情,请按此link。
答案 1 :(得分:1)
我非常接近我的回答,这完全是关于namespace
问题和错误显示问题:
Illuminate\Database\QueryException $e
应该是:
\Illuminate\Database\QueryException $e
try {
DB::table('users')->insert($userData);
} catch(\Illuminate\Database\QueryException $e){
$errorCode = $e->errorInfo[1];
if($errorCode == '1062'){
dd('Duplicate Entry');
}
}
return
和throw
错误无效,但'dd'方法有效。这样可以节省我两次查询重复项并插入的时间,并为此感到高兴:)
答案 2 :(得分:0)
如果您只是想避免重复输入异常而不必在try{} catch{}
之间包装所有内容,则可以简单地使用Laravel的firstOrCreate()
方法,如下所示:
User::firstOrCreate([
'email' => $request->email // unique field here
], $userData);
使用此方法假定您正在用户模型上调用protected $guarded = []
。
答案 3 :(得分:0)
公共函数规则(){
return [
'tool_id' => ['required','integer','unique:assign_toolto_joborders'],
'joborder_id' => ['required','integer'],
'assign_date' => ['required','date_format:d-m-Y'],
'tool_qty' => ['required','integer']
];
}