我有一个添加新属性的功能。但是我想在将新数据添加到数据库之前检查“代码”列中的重复数据。如果数据存在,将出现一条消息错误。
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));
}
答案 0 :(得分:0)
AssetType
的迁移情况如何?
我问是因为您可以在架构中执行以下操作,将->unique()
添加到创建列中,或者进行迁移以添加约束。
您还可以通过以下方式进行检查:
// Search database table for entry
$entry = AssetType::where('code', '=', $pro->code)->first();
// If not found
if ($entry === null) {
// Save method here.
}
否则,您可以使用手动验证器或创建带有验证的Request
参考文献:
答案 1 :(得分:0)
最简单的方法是检查代码是否为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
];
}
您现在要做的就是在控制器方法上键入请求的提示。传入的表单请求将在调用controller方法之前进行验证,这意味着您无需使用任何验证逻辑来使控制器变得混乱:
public function store(StorePro $req)
{
// The incoming request is valid...
// Retrieve the validated input data...
$validated = $req->validated();
}
如果对此还有其他疑问,请随时提问。资料来源:Laravel官方documentation。
答案 2 :(得分:0)
您可以使用laravel Request Validation
<svg xmlns="http://www.w3.org/2000/svg" width="200" height="100" version="1.1">
<style>
/* hide elements by default */
.hide {
display: none;
}
/* show the elements by target */
#one:target .one,
#two:target .two {
display: block;
}
/* BONUS: using this technique, you can select other elements */
#one:target .default,
#two:target .default {
display: none;
}
/* some colors... */
.one {
fill: red;
}
.two {
fill: yellow;
}
</style>
<g id="one">
<g id="two">
<rect width="200" height="100" stroke="black" stroke-width="2" fill="green"/>
<circle class="hide one" cx="50" cy="50" r="20"></circle>
<circle class="hide two" cx="100" cy="50" r="20"></circle>
<circle class="default" cx="150" cy="50" r="20"></circle>
</g>
</g>
</svg>