2016-08-16 2 views
0

Я работаю в CakePHP 3.2работы с временной таблицей в CakePHP 3

У меня есть таблица Carts для хранения продуктов в корзине, когда пользователь вошел в систему с user_id.

Я хочу, чтобы addToCart был доступен для пользователя без входа в систему. Но в этом случае я хочу использовать временную таблицу для хранения данных корзины и когда пользователь вошел в систему, переведите все данные из временной таблицы в таблицу carts и удалите temporary table.

Как работать с временной таблицей в CakePHP 3? Является ли хорошей практикой использовать временные данные для того же или есть ли лучшая альтернатива этому?

Edit 2

значения для хранения в печенье/временную таблицу

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; 
        } 
       } 
      } 

Надеюсь, что я ясно вам.

ответ

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); 
} 

На view.ctp для CartController

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