2017-08-29 139 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