2

在我的网站(Cake 2.x)上,用户可以添加收藏夹。当用户登录时,它就像一个魅力。

如果用户未登录,它会将收藏夹保存到会话数组中。

我现在正在努力解决如何在用户登录后将会话收藏夹保存到数据库中。

目前,我的会话数组如下所示:

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

对于我的数据库,我只需要 $id 和 User.id(登录后)。login() 后如何将条目保存到数据库中?

我的联接表包含以下字段: item_id 和 user_id

提前致谢

4

3 回答 3

2

您只需将数据设置为模型,然后像这样保存:

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

那应该将记录保存到数据库中。

于 2013-02-13T15:42:05.447 回答
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('/');
    }

希望这对任何人都有帮助..

于 2013-02-17T20:37:43.647 回答
0

您可以在UsersController的登录操作中执行此操作。检查之后if($this->Auth->login())和之前,$this->redirect()而不是重定向到另一个控制器。

于 2014-03-10T02:42:55.627 回答