我正在使用 CakePHP 3.2
我有一个表
Carts
,用于在用户使用 user_id
登录时将产品存储在购物车中。
我也希望用户无需登录即可访问 addToCart。但在这种情况下,我想使用临时表来存储购物车数据,当用户登录时,将所有数据从临时表传输到
carts
表并删除 temporary table
。
如何在 CakePHP 3 中使用临时表?使用临时数据是一个好的做法还是有更好的替代方案?
编辑2
要存储在 cookie/临时表中的值
product_id
seller_id
seller_product_id
quantity
协会
product_id
是 products
表的外键
seller_id
是 sellers
表的外键
seller_product_id
是 seller_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;
}
}
}
希望我对你来说清楚。
您可以将其存储在访客的 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>';
}
}
}