2016-08-16 134 views
0

我在CakePHP的3.2臨時表時CakePHP中3

工作,我有一個表Carts當用戶與user_id登錄到產品存放在購物車。

我想addToCart訪問用戶沒有登錄太。但是在這種情況下,我想使用臨時表來存儲購物車數據,並且當用戶登錄時,將臨時表中的所有數據轉移到carts表並刪除temporary table

如何在CakePHP 3中使用臨時表?使用相同的臨時數據是否是一種好的做法,還是有更好的選擇嗎?

編輯2

值來存儲的cookie/TEMP表

product_id 
seller_id 
seller_product_id 
quantity 

協會

product_id是外鍵productsseller_id是外鍵sellersseller_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; 
        } 
       } 
      } 

希望我是對你清楚。

回答

0

您可以將它存儲在客人的cookies中,然後在登錄時將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>'; 
     } 
    } 
} 
+0

但問題是我怎樣才能獲取與cookie的關聯數據。因爲我只將主鍵存儲到cookie。 – Gaurav

+0

我可以嘗試幫助你,你的數據庫是如何設置的以及這些關聯是什麼? – Derek

+0

請參閱編輯2 – Gaurav