我有一个添加新属性的函数。但是我想在将新数据添加到数据库之前检查"代码"列中的重复数据。如果数据存在,则会出现一条消息错误。
function addPro(Request $req)
{
$id = $req->type_id;
$type = AssetType::find($id);
if($req->save == 'save'){
$pro = new TypeProperties;
$pro->name = $req->name;
$pro->code = $req->code;
$pro->type = $req->type;
$pro->assettype_id = $req->type_id;
$pro->save();
Schema::table($type->code, function ($table) use ($pro) {
if ($pro->type == "textbox")
$table->string($pro->code )->nullable();
if ($pro->type == "textarea")
$table->text($pro->code )->nullable();
});
return redirect(url($type->id.'/add/property'))->with('message','Save successful');
}
return redirect(url('asset/type/'.$type->id));
}
您可以使用 laravel 请求验证
function addPro(Request $req)
{
$id = $req->type_id;
$type = AssetType::find($id);
if($req->save == 'save'){
$req->validate([
'code' => 'required|unique:tablename'
]);
$pro = new TypeProperties;
$pro->name = $req->name;
$pro->code = $req->code;
$pro->type = $req->type;
$pro->assettype_id = $req->type_id;
$pro->save();
Schema::table($type->code, function ($table) use ($pro) {
if ($pro->type == "textbox")
$table->string($pro->code )->nullable();
if ($pro->type == "textarea")
$table->text($pro->code )->nullable();
});
return redirect(url($type->id.'/add/property'))->with('message','Save successful');
}
return redirect(url('asset/type/'.$type->id));
}
最简单的方法是检查代码是否is_null:
if (is_null($pro->code)) {
// It does not exist
} else {
// It exists
}
另一种方法是使用 Laravel 内置的ValidateRequest
类进行验证。此验证最简单的用例是直接在 store(( 方法中调用它,如下所示:
$this->validate($req, [
'code' => 'required|unique,
//... and so on
], $this->messages);
这样,您就可以验证用户$req
,方法是说指定的列是必需的,并且它们必须是唯一的,以便验证通过。在控制器中,您还可以创建消息函数以在未满足条件时显示错误消息:
private $messages = [
'code.required' => 'Code is required',
'code.unique' => 'Code already exists',
//... and so on
];
还可以通过创建新的自定义验证类来实现此目的:
php artisan make:request StorePro
生成的类将被放置在app/Http/Requests
目录中。现在,您可以向 rules 方法添加一些验证规则:
public function rules()
{
return [
'code' => 'required|unique,
//... and so on
];
}
您现在需要做的就是在控制器方法上键入提示请求。传入的表单请求在调用控制器方法之前进行验证,这意味着您无需使用任何验证逻辑来混淆控制器:
public function store(StorePro $req)
{
// The incoming request is valid...
// Retrieve the validated input data...
$validated = $req->validated();
}
如果您对此有任何其他问题,请随时提问。资料来源:拉拉维尔官方文件。
您的AssetType
迁移是什么样的?
我问是因为您可以在架构中执行此操作,并在创建时将->unique()
添加到列中,或者进行迁移以添加约束。
您也可以使用如下所示的内容进行检查:
// Search database table for entry
$entry = AssetType::where('code', '=', $pro->code)->first();
// If not found
if ($entry === null) {
// Save method here.
}
否则,您可以使用手动验证程序或创建带有验证的Request
引用:
- https://laravel.com/docs/5.8/queries#where-clauses
- https://laravel.com/docs/5.8/validation#creating-form-requests
- https://laravel.com/docs/5.8/validation#manually-creating-validators