自动添加外键(已登录用户的用户ID)

时间:2015-05-11 19:57:01

标签: cakephp

我是使用cakephp编程的新手,所以我实现了一个简单的用户游戏应用程序。有一个" hasMany"用户与游戏之间的关系。游戏完全由一个用户创建。因此,游戏模型中有一个字段,名为" user_id"。我已经在使用auth组件,用户可以登录系统。现在,我希望该用户可以向模型添加游戏,但应自动添加user_id(通过访问会话数据)。我怎么能做到这一点?

斯坦尼斯:)

1 个答案:

答案 0 :(得分:1)

  

现在,我希望用户可以向模型添加游戏,但应自动添加user_id(通过访问会话数据)。我怎么能做到这一点?

首先,我强烈建议你做官方的博客教程,因为它会为你提供这样的问题。

在控制器中:

public function add() {
    if ($this->request->is('post') {
        $this->request->data['Game']['user_id'] = $this->Auth->user('id');
        $this->Game->save($this->request->data);
    }
}

但是,通过将逻辑移入模型,可以并且绝对应该做得更好,请记住:模型,瘦的控制器。这是一个细分的简短例子:

// Controller
public function add() {
    if ($this->request->is('post') {
       $this->Game->add($this->Auth->user('id'), $this->request->data);
    }
}

// Model
public function add($userId, $postData) {
        $postData[$this->alias]['user_id'] = $userId;
        return $this->save($this->request->data);
    }
}

通常您不希望直接在模型中访问会话,因为它要求您使用对auth组件或会话对象的静态或单例调用,我们希望尽可能避免这种情况。