0

我正在使用 CakePHP 3.2

Carts用户使用user_id.

我也希望用户无需登录即可访问 addToCart。但在这种情况下,我想使用临时表来存储购物车数据,当用户登录时,将所有数据从临时表传输到carts表并删除temporary table

如何在 CakePHP 3 中使用临时表?使用相同的临时数据是一种好习惯,还是有更好的替代方法?

编辑 2

存储在 cookie/temp 表中的值

product_id
seller_id
seller_product_id
quantity

协会

product_id是表的外键 是表的外键 是products表 的 外键seller_idsellersseller_product_idseller_products

产品表进一步与product_attributes

当前使用carts具有以下列的表格

+-----------+-------------+----------+---------------------+--------+
|  user_id   | product_id  | seller_id | seller_product_id  |quantity |
+-----------+-------------+----------+---------------------+--------+

这就是我正在做的检索相关数据

if (!empty($this->Auth->user('id'))) {
              $user_id = $this->Auth->user('id');

              $g_cart = $this->Carts->find('all', [
                'conditions' => [
                  'user_id' => $user_id,
                ],
                'contain' => [
                  'Products', 'SellerProducts', 'Sellers', 'CartAttributes'
                ]
              ]);
              $g_count = $g_cart->count();

              if (!empty($g_cart)) {
//                foreach($g_cart as $g_c){debug($g_c);}
                  foreach($g_cart as $g_c) {
                    $total_cost += $g_c->quantity * $g_c->seller_product->selling_price;
                  }
              }
          }

希望我对你很清楚。

4

1 回答 1

0

您可以将其存储在访客的 cookie 中,然后在他们登录时将 cookie 数据传输到表中。


我还没有测试过这个,但它应该让球滚动

在添加购物车项目的方法上:

$cart = $this->Cookie->read('Cart.items');
if(!$this->Auth->user()) {
    if(!empty($cart)) {
        $newItem = [
            'Products' => $product->id,
            'Sellers' => $seller->id,
            'SellerProducts' => $sellerProduct->id,
            'quantity' => $quantity
        ];
        $newCart = array_merge($cookie, [$newItem]);
        $this->Cookie->write('Cart', ['items' => $newCart]);
    }else{
        $this->Cookie->write('Cart', [
            'items' => [
                'products' => $product->id,
                'sellers' => $seller->id,
                'seller_products' => $sellerProduct->id,
                'quantity' => $quantity
            ]
        ]);

    }

}else{
    $item = $this->Cart->newEntity();
    if(!empty($cart)) {
        foreach($cart as $items) {
            $data = [
                'user_id' => $this->Auth->user('id'),
                'product_id' => $items['Products'],
                'seller_id' => $items['Sellers'],
                'seller_product_id' => $items['SellerProducts'],
                'quantity' => $items['quantity']
            ];
            $item = $this->Cart->patchEntity($item, $data);
            $this->Cart->save($item);
        }
        $this->Cookie->delete('Cart.items');
    }
}

在 CartController 视图方法上

$cart = $this->Cookie->read('Cart');    
$entities = [];

if(!$this->Auth->user() && !empty($cart) {
    $i = 0;
    foreach($cart['items'] as  $items) {
        foreach($items as $model => $id) {
            if($model == 'quantity') {
                $quantity = $id;
                continue;
            }
            $this->loadModel($model);
            $entity = $this->$model->get($id, ['contain' => []]);
            $entities[$i][] = $entity;
            $entities[$i]['quantity'] = $quantity;
        }
        $i++;
    }
    $this->set('items', $entities);
}

在 CartController 的 view.ctp 上

if(!empty($items)) {
    foreach($items as $item) {
        foreach($item as $entity) {
            echo '<div><?=$entity->name</div>';
            echo '<div><?=$entity->quantity</div>';
        }
    }
}
于 2016-08-17T02:23:27.147 回答