我有一张这样的表
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 :(得分:0)
使用create方法时,它会返回插入行的实例。因此,如果您需要访问先前插入的行,则可以使用$adminbillings->id
。
答案 1 :(得分: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('/');
}
希望这对你有所帮助。