【问题标题】:CakePHP: Is there a way to include variables in the definition of hasAndBelongsToMany?CakePHP:有没有办法在 hasAndBelongsToMany 的定义中包含变量?
【发布时间】:2010-06-29 19:50:51
【问题描述】:

我最近开始使用 CakePHP 并尝试定义用户特定的“字段”首选项。基本上,我希望每个用户都能够指定他/她想在表格中看到哪些字段。

为此,我有一个 users 表、一个 fields 表和一个 fields_users 表。最后一个表只是一个 field_id 和 user_id,因此代码知道将该字段与该用户链接。

到目前为止,我已经为“用户”创建了一个控制器/模型,并为“字段”创建了一个控制器/模型,并将它们与 hasAndBelongsToMany 属性链接起来。例如,在“字段”模型中,我定义了以下属性:

` var $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)

【问题讨论】:

    标签: cakephp model


    【解决方案1】:

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

    【讨论】:

    • 让我更清楚一点——我知道如何获取用户 ID 等,并且我知道如何从控制器和模型中设置“hasAndBelongsToMany”属性。问题是,即使我在控制器的“beforeFilter”函数中修改了“hasAndBelongsToMany”属性,使用该属性的关键代码似乎已经执行,并且没有考虑条件我想要的只是能够获得某种数据结构,其中包括为当前用户指定的字段信息。现在,我可以得到这个,但我为每个用户得到它。
    • 我刚改成下面这样,现在好像可以用了。 function beforeFilter() { parent::beforeFilter(); $user_id = $this->Session->read('User.id'); $this->Field->hasAndBelongsToMany['User']['conditions'] = array( 'User.id' => $user_id ); } 这真的很奇怪,因为我尝试了各种方法来让它运行。在此之前,我想也许我用初始声明中的值覆盖了整个数组——似乎这些在 __construct 和 beforeFilter 之间的某个时间被蛋糕修改了。无论如何,很抱歉打扰您。谢谢你告诉我。
    猜你喜欢
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多