CakePHP:获取登录用户的关联对象
Posted
技术标签:
【中文标题】CakePHP:获取登录用户的关联对象【英文标题】:CakePHP: get associated objects of logged in user 【发布时间】:2012-04-12 21:16:40 【问题描述】:我尝试将关联模型的数据接收给当前登录的用户。 这是我当前的用户模型:
class User extends AppModel
public $name = 'User';
public $hasMany = array(
'Website' => array(
'className' => 'Website',
'foreignKey' => 'user_id'
)
);
这是与用户模型相关联的网站模型:
class Website extends AppModel
public $name = 'Website';
public $belongsTo = array(
'User' => array(
'classname' => 'User',
'foreignKey' => 'user_id'
)
);
当我尝试获取登录用户的网站时,我不想在数据库请求的条件下以静态方式设置网站的 user_id。所以我尝试使用关联:
public function beforeFilter()
parent::beforeFilter();
$this->Website->User->id = $this->Auth->user('id');
// OR
$this->Website->User->set($this->Auth->user());
public function index()
$this->set('websites', $this->Website->find('all'));
但它会返回所有网站,而不是只返回具有正确 user_id 的网站。
有没有办法按照我的建议来做?如果是,我做错了什么?
非常感谢!
【问题讨论】:
【参考方案1】:如果您使用 Model->find('all') 将检索该模型的所有记录。
使用您的belongTo 关系,当您检索用户(使用find->)时,Cake 将检索同一集合中的网站。根据您处理身份验证的方式,该数据可能是从用户会话开始时开始的
【讨论】:
这似乎是一个很好的解决方案,唯一的问题是 Cake 现在必须执行 2 次查询而不是 1 次 :( 当你使用belongsTo关系时,Cake只做一个查询自动加入相关表 你能举个例子,说明如何在控制器中正确使用belongsTo关联,这样Cake只做1次查询吗?以上是关于CakePHP:获取登录用户的关联对象的主要内容,如果未能解决你的问题,请参考以下文章