使用Eloquent更新MYSQL中的产品数量

时间:2017-05-29 17:54:28

标签: php mysql eloquent

我正在使用PHP创建一个简单的电子商务应用程序,利用Laravel的Eloquent ORM。我有一个购物车类,它创建一个具有三个属性的对象,即项目,总数量和总价格。这些项目是从MySQL的产品表中获取的。这是我在浏览器控制台中通过ajax打印出购物车对象的方式:

{
    "items": {
        "1": {
            "qty": "3",
            "price": 1200,
            "item": {
                "id": 1,
                "title": "Tennis Shoes",
                "img": "https://s3.amazonaws.com/mybucket/tennis.jpg",
                "quantity": 40,
                "description": "nice tennis shoes to wear or play in.",
                "price": 400
            }
        }
    },
    "totalQty": 3,
    "totalPrice": 1200
}

现在,在购物车中的商品成功结帐/订购后,我需要根据购物车中每件商品的订购数量更新/减少这些商品在我的数据库中的产品表中的数量宾语。我对此感到沮丧。

UPDATE 这是我尝试使用的新逻辑:

try {
    $cart = new Cart(); // holds the cart object
    $items = $cart->items;
    $ids = [];

    // after payment is successfully captured and a new order was stored in database

    foreach ($items as $item) {

    $ids[] = $item['item']['id'];

    }

    // uses my product model
    $products = Product::find($ids);

    foreach ($products as $product)  {

      $product->decrement('quantity', $item['qty']); // here is the issue

    } 

} catch (Exception $e) {

    // catch errors          

}

现在这个逻辑的工作方式是将相应的产品放回我的数据库并递减,但是,如果购物车对象中有多个项目,则所有产品都按最后一个项目数量而不是关联项目递减数量。这一行:

$product->decrement('quantity', $item['qty']); // here is the issue

按最后一项['qty']递减每件商品,而不是该商品所关联商品的商品['qty'] ....有什么建议吗?

2 个答案:

答案 0 :(得分:2)

如何从项目ID中获取您的产品集合,循环遍历项目,找到具有该项目ID的产品,并减少数量。

foreach ($items as $item) {
    $product = Product::find($item['id']);
    $product->decrement('quantity', $item['qty']);
}

认为唯一不好的部分是在每个项目上多次运行查询以查找产品。不确定会导致的开销。

答案 1 :(得分:0)

您循环浏览上面的每个$项目,因此$ item现在设置为$ items的最后一条记录。当您循环浏览$ products时,您不会再次循环$ items,因此它只使用上面设置的最后一个$项。