2

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

Member 模型与 Memberitem 有 hasMany 关系,而 Memberitem 模型与我的 Member 模型有 belongsTo 关系。

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 条记录。

4

1 回答 1

0

这是经典 :-) 不过需要一段时间才能得到它。

蛋糕手册对此非常满意。您应该阅读:http ://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html# contains-deeper-associations

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

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

或者更适合您的应用程序:

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

希望有帮助!

于 2014-05-06T11:27:17.303 回答