Laravel:如何检查表中是否存在输入值

时间:2017-08-09 18:03:49

标签: php laravel laravel-5.4

我使用以下存储方法将数据保存到表中。

public function store(Request $request)
    {
        foreach ($request->admin_id as $key=>$val){
            $adminbillings = AdminBilling::create([
                'month' => $request->month,
                'rate' => $request->rate[$key],
                'admin_id' => $val,
            ]);          
        }

        return redirect('/');
    }

现在,我想在存储之前检查表中是否已存在任何输入值。如果表中的一行已经包含所有3个相同的输入,则它应该什么都不做,否则存储输入。这就像是

if  
    $requested->month     does not exist in month     column || 
    $requested->rate      does not exist in rate      column || 
    $requested->admin_id  does not exist in admin_id  column 
then 
    save

请帮帮我。我正在使用Laravel 5.4。

谢谢

1 个答案:

答案 0 :(得分:1)

有一种Laravel方法可以帮助您调出 firstOrCreate ,请参阅https://github.com/laravel/framework/blob/5.4/src/Illuminate/Database/Eloquent/Builder.php#L356

  

你将如何使用

AdminBilling::firstOrCreate([
  'month' => $request->month,
  'rate' => $request->rate[$key],
  'admin_id' => $val,
]);
  

解释

如果你看到它的源代码,那么&首先,如果它发现它只是返回

    if (! is_null($instance = $this->where($attributes)->first())) {
        return $instance;
    }

否则它会使用给定的数组创建一个新行&返回模型

    return tap($this->newModelInstance($attributes + $values), function ($instance) {
        $instance->save();
    });
  

提示

当您使用 firstOrCreate 时,您应该始终只有一个,然后使用其余数据进行更新,例如

                Course::firstOrCreate([
                    'isbn' => (string) $isbn,
                ])->update([
                    'title' => $title,
                    'url' => 'URL',
                    'date_published' => $datePublished
                ]);

此处ISBN对我来说是独一无二的,因此我使用 firstOrCreate 调用 $isbn ,然后我用其余数据更新了行< / p>