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:获取登录用户的关联对象的主要内容,如果未能解决你的问题,请参考以下文章

cakephp 3.0 注册与现有用户问题关联的帐户

Cakephp 3 保存关联属于ToMany

CakePHP 3 的关联限制不起作用

CakePHP3:如何即时更改关联策略?

CakePHP 2.1 - 模型关联 - 保存和查找

CakePHP:无法识别 hasMany 关联