2017-08-09 24 views
0

我將數據保存到一個表下列存儲方法存在的輸入值。Laravel:如何檢查表

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。

謝謝

+0

也許爲有問題的列創建唯一的關鍵字,並讓RDBMS處理該問題,在您的應用中只是捕獲異常。 https://stackoverflow.com/questions/635937/how-do-i-specify-unique-constraint-for-multiple-columns-in-mysql – Kyslik

+0

我不確定,因爲我想存儲值,如果至少有一個輸入對其自己的列是唯一的。如果一個輸入是唯一的,另外兩個可以在它們自己的列中有許多值。 – Ahsan

+0

使用NULL-able字段,那些被視爲非唯一的https://stackoverflow.com/questions/3712222/does-mysql-ignore-null-values-on-unique-constraints;我看到它可能不會爲你工作,對不起。 – Kyslik

回答

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然後我就用其他數據更新該行

+0

非常感謝。 – Ahsan