在Laravel

时间:2017-08-29 10:45:27

标签: php mysql 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();

2 个答案:

答案 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('/');

}

希望这对你有所帮助。