Laravel使用Eloquent更新多个数据库行

时间:2017-06-07 19:52:47

标签: php laravel eloquent

我想在将产品租给客户时更新产品租赁计数。 网站的所有者可以租用多件东西。我通过使用Ajax克隆来实现这一点。

现在,当有人租用了2把椅子和1张桌子时,我想更新两种产品的products_leased行。我该怎么做?

我得到的错误:

`SQLSTATE[01000]: Warning: 1265 Data truncated for column 'product_leased' at row 1 (SQL: update `products` set `product_leased` = 3 5, `updated_at` = 2017-06-07 19:57:03 where `id` = 1)`

我的控制器:

public function create_order($id) {

    $customer = Customer::find($id);
    $pr = Product::get();

    $rent_from = Request::input('rent_from');
    $rent_till = Request::input('rent_till');
    $productArray = Request::get('product_name');
    $productCountArray = Request::get('product_count');

    $rentProduct = new cRent;
    $rentProduct->customer_id = $customer->id;
    $rentProduct->rent_from = $rent_from;
    $rentProduct->rent_till = $rent_till;
    $rentProduct->rented_products = implode(', ', $productArray);
    $rentProduct->rented_products_count = implode(', ', $productCountArray);

    $rentProduct->save();

    $pru = Product::find($id);

    $pru->product_leased = implode(' ', $productCountArray);
    $pru->update();

    return back();


}

上述代码仅在租用一个产品时有效。不是我租2件产品的时候。

提前致谢。

2 个答案:

答案 0 :(得分:0)

$rentProduct = new cRent;

上面的代码表示只有一个cRent off-course实例,如果你想让另一个事务与数据库有不同的值或数据需要另一个实例

我认为你想要的是这样的

public function create_order($id) {

    $customer = Customer::find($id);
    $pr = Product::get();

    $rent_from = Request::input('rent_from');
    $rent_till = Request::input('rent_till');
    $productArray = Request::get('product_name');
    $productCountArray = Request::get('product_count');

    foreache($productArray as $prod){

        $rentProduct = new cRent;
        $rentProduct->customer_id = $customer->id;
        $rentProduct->rent_from = $rent_from;
        $rentProduct->rent_till = $rent_till;
        $rentProduct->rented_products = $prod
        $rentProduct->rented_products_count = //not sure in this line

        $rentProduct->save();
    }



    $pru = Product::find($id);

    $pru->product_leased = implode(' ', $productCountArray);
    $pru->update();

    return back();


}

答案 1 :(得分:0)

为什么要将相同的$ id传递给

 $customer = Customer::find($id);

$pru = Product::find($id);

为什么不为每个产品创建单独的租赁记录,并将它们作为一对多关联,而不是将产品名称和计数破坏并存储在一起?假设数组中的产品名称和产品计数行,可能会产生以下影响:

foreach(array_combine($productArray, $productCountArray) as $product_name => $count){
    $product = Product::where('name', $product_name)->first();
    $rentProduct = new cRent;
    $rentProduct->customer_id = $customer->id;
    $rentProduct->rent_from = $rent_from;
    $rentProduct->rent_till = $rent_till;
    $rentProduct->product_id = $product->id
    $rentProduct->count = $count;
    $rentProduct->save();
}

更好的是,不要传递产品名称,而是从表单中传递产品ID。