Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从Laravel中的同一方法存储/更新中的多行_Php_Mysql_Laravel - Fatal编程技术网

Php 从Laravel中的同一方法存储/更新中的多行

Php 从Laravel中的同一方法存储/更新中的多行,php,mysql,laravel,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' =&g

我有一张这样的桌子

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
我可以从一个方法中添加多行,但这里一行是store,一行是update,默认情况下update需要两个参数。但也许我在什么地方弄错了。你能指导我如何实现我的目标吗

我可以使用此行访问方法中的前一行:

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

使用create方法时,它将返回插入行的实例。因此,如果需要访问以前插入的行,可以使用
$adminbillings->id

使用create方法时,它将返回插入行的实例。因此,如果您需要访问先前安装的行,可以使用
$adminbillings->id

这不是最佳解决方案,但您将实现您的目标。 要在插入后更新以前的记录,可以执行以下操作-

       $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('/');
}


希望这对您有所帮助。

这不是最好的解决方案,但您会实现目标。 要在插入后更新以前的记录,可以执行以下操作-

       $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('/');
}


希望这对您有所帮助。

您可以检查添加查询是否成功,如果成功,请运行更新查询。是,添加查询成功。您可以建议我在同一方法中更新查询的过程吗?您可以检查添加查询是否成功,如果成功,请运行更新查询。是,添加查询成功。你能建议我用同样的方法更新查询的过程吗?谢谢。但我可以访问以前插入的行。请看一下这篇文章的横线。我需要编辑/更新它。谢谢。但我可以访问以前插入的行。请看一下这篇文章的横线。我需要编辑/更新它。谢谢。我明白这里的逻辑。我这样累了,但没有工作。然而,这是有效的(我不知道怎么做):AdminBilling::where('admin_id',$adminId)->where('month',0)->orderBy('created_at','asc')->skip(2)->take(1)->update(['month'=>$adminbillings->created_at]);好的。但是通过跳过(2)->take(1),它将返回desc order中的第三条记录。是的,这也让我感到惊讶。。。!!但它起作用了。我仍然不明白它的逻辑。稍后我将创建一些类似的情况,以了解它是如何工作的。尽管我测试了不到10行的解决方案。如果有100排,我不知道会发生什么。您的解决方案更符合逻辑。我会找到解决办法的。非常感谢,谢谢。我明白这里的逻辑。我这样累了,但没有工作。然而,这是有效的(我不知道怎么做):AdminBilling::where('admin_id',$adminId)->where('month',0)->orderBy('created_at','asc')->skip(2)->take(1)->update(['month'=>$adminbillings->created_at]);好的。但是通过跳过(2)->take(1),它将返回desc order中的第三条记录。是的,这也让我感到惊讶。。。!!但它起作用了。我仍然不明白它的逻辑。稍后我将创建一些类似的情况,以了解它是如何工作的。尽管我测试了不到10行的解决方案。如果有100排,我不知道会发生什么。您的解决方案更符合逻辑。我会找到解决办法的。多谢各位