2013-02-13 151 views
2

在我的網站(Cake 2.x)上,用戶可以添加收藏夾。 當用戶登錄時,它就像一個魅力。Cakephp登錄後將會話保存到數據庫

如果用戶未登錄,它會將收藏夾保存到會話數組中。 。

我現在struggeling,有關如何在用戶登錄後會話收藏夾保存到數據庫中

現在,我的會話陣列看起來像這樣:

$sessiondata = array('item_id' => $id, 'title' => $fitem['Item']['title'],'slug' => $fitem['Item']['slug']); 

對於我數據庫,我只需要$ id和User.id(登錄後)。如何在登錄後將條目保存到數據庫()?

我加入表中包含的字段:ITEM_ID和user_id說明提前

感謝

回答

0

我花了一段時間,但我最終得到了這個工作。這裏是:

在我的AppController中,我將用戶重定向到我的項目控制器afterlogin()後。

public $components = array(
         'Auth'=>array(
          'loginRedirect'=>array(
            'controller' => 'items', 'action' => 'afterlogin'), 
        ))); 

然後在我的上述ItemsController,我增加了afterlogin()函數:

public function afterlogin(){ 
     $favors = $this->Session->read('favorites');//get favorites stored in Session 
     $this->loadModel('Item2user');//Load my join-table model 
     foreach ($favors as $favor){ 
      //search for existing favorites 
      $found = $this->Item2user->find('all', array(
        'conditions' => array('item_id =' => $favor['item_id'], 
            'user_id =' => $this->Auth->user('id')) 
        )); 

      if($found){ 
       //the entry is already in the db, ->do nothing 
      } 
      else { 
       //now save the entry to the join-table 
       $this->Item->create(array(
        'Item' => array('id' => $favor['item_id']), 
        'User' => array('id' => $this->Auth->user('id')) 
       )); 
       $this->Item->save(); 
      } 
     } 
     $this->redirect('/'); 
    } 

希望這有助於任何人..

2

你只需要對數據集模型,然後將其保存,像這樣:

$this->Item->create(array(
    'item_id' => $sessiondata['item_id'], 
    'title' => $sessiondata['title'], 
    'slug' => $sessiondata['slug'] 
)); 
$this->Item->save(); 

這應該將記錄保存到數據庫。

+0

我不想保存「Item」,我想將「item_id」和$ this-> Auth-> user('id')保存到我的item_user(join)表中。 – 3und80 2013-02-13 16:14:00

0

你能做到這一點上UsersController的登陸行動。在檢查if($this->Auth->login())之前和$this->redirect()之前,而不是重定向到另一個控制器。