2010-06-29 86 views
0

我最近开始使用CakePHP,并试图定义用户特定的“字段”首选项。基本上,我希望每个用户都能够指定他/她希望在表格中看到哪些字段。CakePHP:有没有办法在hasAndBelongsToMany的定义中包含变量?

为此,我有一个用户表,一个字段表和一个fields_users表。最后一个表只是一个field_id和user_id,所以代码知道将该字段与该用户相关联。

到目前为止,我已经为'User'和'Fields'的控制器/模型创建了一个控制器/模型,并将它们与hasAndBelongsToMany属性链接起来。例如,在 '场' 的模式,我已经定义了以下属性:

` 变量$ hasAndBelongsToMany =阵列(

'User' => array (
    'className' => 'User', 
    'foreign_key' => 'field_id', 
    'join_table' => 'fields_users', 
    'fields' => array('User.id'), 
    'conditions' => array('User.id' => 2), 
    'unique' => false, 

) );`

正如你可以看到上面,数组'条件'部分中的'User.id'是硬编码的。

我的问题是这样的:我怎样才能让这个属性的'条件'部分被设置为当前用户的ID?

显然,我只关心当前用户的字段偏好,但此时我正在获取每个人的用户信息。

将它设置为初始属性定义中的一个变量不起作用,我不知道我应该在什么时候这样做(或者如果完全有更好的方法)。 (在beforeFilter中没有工作,我似乎无法从模型的__construct函数中访问$ _SESSION)

回答

0

Do it from the controller。您可以通过$this->Auth->user('id')获取当前用户ID。

+0

让我更清楚 - 我知道如何获取用户ID等,并且我知道如何从控制器和模型中设置'hasAndBelongsToMany'属性。问题是,即使我在控制器的'beforeFilter'函数中修改'hasAndBelongsToMany'属性,看起来使用该属性的关键代码已经被执行,并且条件不被考虑在内 我想要的全部是能够获得某种数据结构,包括当前用户指定的字段信息。现在,我可以得到这个,但我可以为每个用户获得。 – GTT 2010-06-30 15:14:50

+0

'beforeFilter()'中的代码是什么? – bancer 2010-06-30 15:48:00

+0

我只是将其更改为以下内容,现在似乎正在开展工作。 (){ 'function beforeFilter(){ \t \t parent :: beforeFilter(); \t \t $ user_id = $ this-> Session-> read('User.id'); \t \t $ this-> Field-> hasAndBelongsToMany ['User'] ['conditions'] = array('User.id'=> $ user_id); \t}' 这真的很奇怪,因为我正在尝试各种各样的事情来让它运行。在此之前,我想可能是我用初始声明中的值覆盖了整个数组 - 它似乎在__construct和beforeFilter之间有时会被cake修改。无论如何,很抱歉打扰你。谢谢你通过它说话。 – GTT 2010-06-30 19:55:23

相关问题