【问题标题】:How to loop input field value and insert to its row based on the database value in Laravel?如何根据 Laravel 中的数据库值循环输入字段值并插入其行?
【发布时间】:2019-06-23 01:56:35
【问题描述】:

我的问题是我想根据数量更新quantity_served,并根据输入值将最后一个循环值插入到最后一条记录中。

比如我的输入值为180。

我的代码没有插入循环的最后一个值而不是数量的完整值。

$var = $request->get('id');
$data = bulkcorporatemodel::orderBy('id', 'asc');

foreach ($data as $item)
{
    if ($var == 0 || $var < 0)
    {
        break;
    }

    $bulkcorp = bulkcorporatemodel::find($item->id);
    $dummyHolder = $bulkcorp->quantity;
    $bulkcorp->quantity_served = $dummyHolder;
    $bulkcorp->save();

    $success_output = '<div class="alert alert-success">BULK DATA UPDATED</div>';
    $var = $var - $dummyHolder;
} 

【问题讨论】:

  • 据我所知,您正在尝试将$dummyHolder 分配给不存在的$bulkcorp-&gt;quantityserved,它应该是$bulkcorp-&gt;quantity_served。我错过了什么吗?
  • 抱歉先生拼写错误,它仍然不起作用先生。
  • 老实说,我在您的代码中没有发现任何问题,除非您循环 $data as $data,这是错误的并尝试将其更改为 $data as $item,当然也将 $data-&gt;id 更改为 $item-&gt;id 和看看会发生什么
  • 这不起作用,先生。
  • In $data try $data = bulkcorporatemodel::all(); 不需要按id排序,总是按id排序。如果有疑问,请使用哑死功能dd($data); 看看是否得到了您的期望。另外(不需要,但一种约定):将您的 ORM 模型名称设为 BulkCorporate 而不是 bulkcorporatemodel。你很好,但是当你的代码变大时它会提高可读性。

标签: php laravel loops laravel-5 eloquent


【解决方案1】:

(edit: 我注意到 $item 实际上已经在您的 $data 集合中,无需查找该项目,它已经存在。我已经相应地调整了代码并一起缩短代码:) )

$var = $request->get('id');
$data = bulkcorporatemodel::orderBy('id', 'asc')->get();
foreach ($data as $bulkcorp)
{
    if ($var <= 0)
    {
        break;
    }

    $bulkcorp->update(
        ['quantity_served' => $bulkcorp->quantity]
    );

    $success_output = '<div class="alert alert-success">BULK DATA UPDATED</div>';
    $var = $var - $bulkcorp->quantity;
}

关键字是update()

我不清楚$var$bulkcorp-&gt;quantity 之间的关系是什么。如果 var 确实是一个 id,您将在一个周期内低于 0,并且不会执行 $data 集合的其余部分。如果$request-&gt;get('id') 是一个大数字,没问题。

但是,这是您真正想要实现的目标。通常,我们应该为您提供此代码,但可以,一次:

$stock = $request->get('id');
$data = bulkcorporatemodel::orderBy('id', 'asc')->get();
foreach ($data as $bulkcorp)
{
    if ($stock <= 0)
    {
        break;
    }
    $stock >= $bulkcorp->quantity ? $served = $bulkcorp->quantity : $served = $stock;

    $bulkcorp->update(
        ['quantity_served' => $served]
    );

    $success_output = '<div class="alert alert-success">BULK DATA UPDATED</div>';
    $stock = $stock - $bulkcorp->quantity;
}

【讨论】:

  • 还是没有运气先生,我输入的 180 返回到第一行 100 然后第二行再次返回完整值。
  • 我也在考虑。我得到它。 $bulkcorp->quantity_served 是可以提供的库存数量,对吗?换句话说,如果库存用完,就尽你所能,然后其余的应该为零。这是你想要达到的吗?
  • $bulkcorp->quantity 是只能服务/插入到 $bulkcorp->quantity_served 每行先生的值,如果 $var 具有额外值(自 180 以来的 80 值-100 = 80),它将插入到下一行。
  • 我已经更新了代码,请尝试一下。现在应该没问题了。看看第二个代码块。
  • 问题先生是,它不会得到最后一个值(80),而是 $bulkcorp->quantity 的完整值,
猜你喜欢
  • 1970-01-01
  • 2019-03-05
  • 2019-10-18
  • 1970-01-01
  • 1970-01-01
  • 2023-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多