如何检查数据库中是否存在数据

时间:2019-08-22 07:09:42

标签: laravel

我有一个添加新属性的功能。但是我想在将新数据添加到数据库之前检查“代码”列中的重复数据。如果数据存在,将出现一条消息错误。


    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));
        }

3 个答案:

答案 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>