在将数据添加到其中一个关节模型Cakephp2之后,在循环中将数据添加到jointable

f45qwnt8  于 2023-04-30  发布在  PHP
关注(0)|答案(1)|浏览(262)

所以我做了一个网上商店,我想使每一次购买有多个产品。我有表products、purchases和product_purchases。我想让这个函数为purchases添加一行(该部分有效),减去所需的库存(也有效),并为product_purchases添加所需的行数。问题是只有最后一行被保存到连接表中。

public function add($price=null){

        $user_id = $this->Session->read('Auth.User')['id'];
        
        $purchase_in = array();
        $purchase_in['Purchase']['user_id']= $user_id;
        $purchase_in['Purchase']['price']= $price;
        $this->Purchase->save($purchase_in);

        $jointable_in = array();
        $Purchase = array();

        $purchase_id=$this->Purchase->getInsertID();

        $Purchase['id_purchase']= $purchase_id;

        $jointable_in['Purchase']['Purchase']= $Purchase;

        $cart = $this->Session->read('cart');

        foreach ($cart as $product_id) {
            $product = $this->Purchase->Product->findById($product_id);

            $stock = ($product['Product']['stock'])-1;

            $stock_in = array();
            $stock_in['Product']['id']= $product_id;
            $stock_in['Product']['stock']= $stock;
            $this->Purchase->Product->save($stock_in);

            
            $product = array();

            $product['id_product']= $product_id;
            $jointable_in['Product']['Product']= $product;
            
            $this->Product->Purchase->save($jointable_in);
            
        }
        return $this->redirect(array('controller'=>'products','action' => 'cartempty'));

    }

我试过保存到ProductsPurchase模型,但不起作用,我也试过输入一个数组,就像在食谱中那样保存所有,但它没有保存任何东西,我也试过这样做$this-〉Product-〉Purchase-〉clear()后,每次保存,但它添加了空行到Purchase表,所以我不知道还有什么可以尝试的。

x8goxv8g

x8goxv8g1#

我终于解决了这个问题,我只需要使用saveAll()函数一次。
在我的代码中,我试图先保存购买,然后保存HABTM表数据。主要的问题是,这样做蛋糕是把他们作为单独的记录。
最后,我将第一次保存的数据包含在第二次保存的数组中,并将其保存在循环之外。
public function add($price=null){ $idusuario = $this-〉Session-〉read('Auth.“);

$jointable_in = array();
    $aux_array = array();

    $Purchase = array();
    $Purchase['user_id']= $idusuario;
    $Purchase['price']= $price;

    $aux_array['Purchase']= $Purchase;

    $products = array();
    $carrito = $this->Session->read('cart');
    $i=0;

    foreach ($carrito as $idproducto) {
        $producto = $this->Purchase->Product->findById($idproducto);
        $stock = ($producto['Product']['stock'])-1;
        $sales = ($producto['Product']['sales'])+1;

        $stock_in = array();
        $stock_in['Product']['id']= $idproducto;
        $stock_in['Product']['stock']= $stock;
        $stock_in['Product']['sales']= $sales;
        //$this->Purchase->Product->save($stock_in);

        $shop = $this->Product->Shop->findById($producto['Product']['shop_id']);
        $shop_in = array();
        $shop_in['Shop']['id']= $shop['Shop']['id'];
        $shop_sales = ($shop['Shop']['sales'])+1;
        $shop_in['Shop']['sales']= $shop_sales;

        //$this->Product->Shop->save($shop_in);

        $products[$i]=$idproducto;
        $i++;
    }

    $aux_array['Purchase']['count']=$i;

    $aux_array['Product']['Product']= $products;
    array_push($jointable_in,$aux_array);

    //exit(debug($jointable_in));

    $this->Purchase->saveAll($jointable_in,array('deep' => true));

    return $this->redirect(array('controller'=>'products','action' => 'cartempty'));
}

相关问题