在包含列上筛选分页结果

时间:2013-03-22 11:39:51

标签: php cakephp cakephp-2.0 cakephp-2.3

我的数据库成员和成员项目中有两个表。我为它创建了两个模型。一个是会员,另一个是会员

会员模型与Memberitem有很多关系,而Memberitem模型与我的会员模型有关系。

Memberitem条目具有基于颜色的特定分类,例如红色,粉红色,绿色等。 现在我想选择所有使用分页至少有一个粉红色成员项目的成员。

目前我正在使用:

$this->paginate = array(
    'limit' => 5,
    'contain' => array(
        'Memberitem' => array(
            'conditions' => array('Memberitem.color' => 'Pink')
        )
    )
);

但它显示了所有成员。

输出是这样的:

Array
(
[0] => Array
    (
        [Member] => Array
            (
                [id] => 1
                [first_name] => fh
                [last_name] => g
            )

        [Memberitem] => Array
            (
                [0] => Array
                    (
                        [id] => 1
                        [name] => item2
                        [color]=> Pink
                    )
            )

    )

[1] => Array
    (
        [Member] => Array
            (
                [id] => 2
                [first_name] => ad
                [last_name] => vd
            )

        [Memberitem] => Array
            (
            )

    )

[2] => Array
    (
        [Member] => Array
            (
                [id] => 3
                [first_name] => ae
                [last_name] => sdi
            )

        [Memberitem] => Array
            (
                [0] => Array
                    (
                        [id] => 3
                        [name] => item1
                        [color]=> Pink
                    )

            )

    )

)

它显示了这个结果。空成员的成员仍在那里。我只希望得到第1和第3条记录。

1 个答案:

答案 0 :(得分:0)

这是一个经典之作:-)虽然需要一段时间才能得到它。

蛋糕手册在这方面非常平和。你应该阅读:http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html#containing-deeper-associations

因此,如果您只想要具有某些MemberItem的成员,则应查询MemberItem并包含成员模型。您可以从成员模型实际执行此操作:

$this->Member->Memberitem->find('all', array(
    'conditions' => 'Memberitem.color = "Pink"',
    'contain' => 'Member',
));

或者可能更适合你的app:

$this->paginate['Memberitem'] = array(
    'contain' => array('Member'),
    'conditions' => array(
        'Memberitem.color' => 'Pink',
    ),
);
$items = $this->paginate('Memberitem');

希望有所帮助!