正如我从cakephp文档中了解到的,“可控制”行为的优点之一是,如果需要更少的数据,可以获取更少的数据.
但在我的例子中,用户和用户组之间的连接似乎不起作用。
我的协会看起来是:
Group
hasMany: Membership
User
hasMany: Membership
Membership
belongsTo: User, Group
(我不使用HABTM,而是使用中间的模型‘成员’加入用户和组)。
所有模型都实现了“可控制”行为。
现在我想让一个组的所有成员都有一个特定的id,只有他们的id和邮件地址。我的查询就是这样构建的:
$members = $this->Membership->find('all', array(
'conditions' => array(
'group_id' => $id
),
'contain' => array(
'User' => array(
'fields' => array('id', 'fullName')
),
)
));
但是得到的数组如下所示:
array(
(int) 0 => array(
'Membership' => array(
'id' => '1',
'group_id' => '1',
'user_id' => '1',
'role' => 'member'
),
'Group' => array(
'id' => '1',
'name' => 'Foo Group'
),
'User' => array(
'password' => '*****',
'id' => '1',
'name' => 'Dr. Foo'
'mail' => 'foo@bar.baz',
'role' => 'admin'
)
)
)
所以确实有比我想要的更多的字段.(顺便说一句,我设置的“包含”键是相同的:
'contain' => array(
'User.fullName', 'User.id'
)
我是不是利用了可控制的行为错误?
发布于 2013-09-10 17:23:12
你的模特们似乎一点都不装。你把你的模型设置成可控制的吗?
class Post extends AppModel {
public $actsAs = array('Containable');
}
如果是这样的话,问题可能是递归(以避免使用查询获取Group
数组)。可控制行为应该自己处理递归级别,但是尝试在AppModel上设置它,以确保
class AppModel extends Model {
public $actsAs = array('Containable');
public $recursive = -1;
你的第一次尝试
'contain' => array(
'User' => array(
'fields' => array('id', 'fullName')
),
)
从语法上看,它看起来不错,所以它可能是actAs
的东西。
另外,要进行调试,请尝试
$this->Membership->contain('User');
$this->Membership->find('all', array(
'conditions' => array(
'group_id' => $id
));
看看你能不能得到预期的结果。
https://stackoverflow.com/questions/18724491
复制相似问题