首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Cakephp -包含(可包含的行为)获取太多

Cakephp -包含(可包含的行为)获取太多
EN

Stack Overflow用户
提问于 2013-09-10 16:39:28
回答 1查看 5.1K关注 0票数 4

正如我从cakephp文档中了解到的,“可控制”行为的优点之一是,如果需要更少的数据,可以获取更少的数据.

但在我的例子中,用户和用户组之间的连接似乎不起作用。

我的协会看起来是:

代码语言:javascript
运行
复制
    Group
    hasMany: Membership

    User
    hasMany: Membership

    Membership
    belongsTo: User, Group

(我不使用HABTM,而是使用中间的模型‘成员’加入用户和组)。

所有模型都实现了“可控制”行为。

现在我想让一个组的所有成员都有一个特定的id,只有他们的id和邮件地址。我的查询就是这样构建的:

代码语言:javascript
运行
复制
    $members = $this->Membership->find('all', array(
        'conditions'    => array(
                'group_id'      => $id
            ),
        'contain'       => array(
            'User'          => array(
                'fields' => array('id', 'fullName')
            ),
        )
    ));

但是得到的数组如下所示:

代码语言:javascript
运行
复制
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'
        )
    )
)

所以确实有比我想要的更多的字段.(顺便说一句,我设置的“包含”键是相同的:

代码语言:javascript
运行
复制
    'contain'   => array(
        'User.fullName', 'User.id'
    )

我是不是利用了可控制的行为错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-10 17:23:12

你的模特们似乎一点都不装。你把你的模型设置成可控制的吗?

代码语言:javascript
运行
复制
class Post extends AppModel {
    public $actsAs = array('Containable');
}

如果是这样的话,问题可能是递归(以避免使用查询获取Group数组)。可控制行为应该自己处理递归级别,但是尝试在AppModel上设置它,以确保

代码语言:javascript
运行
复制
class AppModel extends Model {
    public $actsAs = array('Containable');
    public $recursive = -1;

你的第一次尝试

代码语言:javascript
运行
复制
    'contain'       => array(
        'User'          => array(
            'fields' => array('id', 'fullName')
        ),
    )

从语法上看,它看起来不错,所以它可能是actAs的东西。

另外,要进行调试,请尝试

代码语言:javascript
运行
复制
$this->Membership->contain('User');
$this->Membership->find('all', array(
    'conditions'    => array(
            'group_id'      => $id
        ));

看看你能不能得到预期的结果。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18724491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档