2017-08-29 192 views
0

從相同的方法更新在多個行我有這樣存儲/在Laravel

month | rate | admin_id 
0  | 1000 | 1 

我存儲與下面的方法的數據的表:

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

當我在添加新行表使用這種方法,我也想用新行的時間戳替換上一行的月份(即0)。因此,該表將成爲

month  | rate | admin_id 
29-08-2017 | 1000 | 1 
0   | 2000 | 1 

我可以從單一的方法添加多個行,但這裏是一個商店,一個是更新,默認情況下更新需要兩個參數。但可能是我誤解了某處。你能指導我如何實現我的目標?

我可以訪問前一行使用這一行裏面的方法:

$ended_at = AdminBilling::where('admin_id', $val)->where('month', 0)->get(); 
+0

您可以檢查添加查詢是否成功,如果是,請運行更新查詢。 – skm

+0

是的,添加查詢成功。你能否建議我在同一個方法中更新查詢的過程? – Ahsan

回答

0

這不是最好的解決方案,但你會達到你的目標。 要更新插入後以前的記錄,你可以這樣做 -

 $res = AdminBilling::select('id')->orderBy('id','desc')->skip(1)->take(1)->first(); //to get prev. row 

     AdminBilling::where('id',$res->id)->update(['month',date()]); // to update month 

把這些線在您的商店的功能 -

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

    $res = AdminBilling::select('id')->orderBy('id','desc')->skip(1)->take(1)->first(); 
    AdminBilling::where('id',$res->id)->update(['month',date()]); 

    } 

return redirect('/'); 

}

希望這能對你有幫助。

+0

謝謝。我看到這裏的邏輯。我厭倦了這種方式,但沒有奏效。然而,這工作(我不知道如何):AdminBilling ::其中('admin_id',$ adminId) - > where('month',0) - > orderBy('created_at','asc') - > skip(2) - > take(1) - > update(['month'=> $ adminbillings-> created_at]); – Ahsan

+0

ok.But通過跳過(2) - > take(1),它將從desc順序返回第3條記錄。 –

+0

是的,這也讓我感到吃驚... !!但它的工作。我仍然沒有得到它的邏輯。稍後我會創建一些類似的情況,以瞭解它是如何工作的。 – Ahsan

0

當您使用創建方法返回的插排的實例。因此,如果您需要訪問以前插入的行,則可以使用$adminbillings->id

+0

謝謝。但我可以訪問先前插入的行。請閱讀帖子的緯線。我需要編輯/更新它。 – Ahsan