包含行为,条件和空数组

时间:2010-12-09 14:47:49

标签: cakephp model behavior contains

我有下一个问题。

部分代码:

        $result = $this->find('all', array(
            'contain' => array(
                'User' => array(
                    'fields' => 'id',
                    'conditions' => array(
                        'id' => $user_id
                    )
                )
            ),
            'fields' => 'url'
        ));

这个find()在Project模型类的方法中调用,我想只检索User.id等于传递给我的方法的一些用户id的项目。 用户HABTM项目和项目HABTM用户。

但执行后我有下一个:


app/views/projects/index.ctp (line 1)

Array
(
    [0] => Array
        (
            [Project] => Array
                (
                    [url] => http://purpled.biz
                    [id] => 1
                )

            [User] => Array
                (
                    [0] => Array
                        (
                            [id] => 4
                            [ProjectsUser] => Array
                                (
                                    [user_id] => 4
                                    [project_id] => 1
                                    [projects_users_role_id] => 0
                                )

                        )

                )

        )

    [1] => Array
        (
            [Project] => Array
                (
                    [url] => http://google.com
                    [id] => 2
                )

            [User] => Array
                (
                    [0] => Array
                        (
                            [id] => 4
                            [ProjectsUser] => Array
                                (
                                    [user_id] => 4
                                    [project_id] => 2
                                    [projects_users_role_id] => 0
                                )

                        )

                )

        )

    [2] => Array
        (
            [Project] => Array
                (
                    [url] => http://test.com
                    [id] => 3
                )

            [User] => Array
                (
                )

        )

)

如你所见,最后一个数组是空的[User]数组,那么如何在不使用foreach / if块的情况下排除这个空数组(我的意思是整个[2]数组)?我知道使用bindModel也可以做到这一切,但这不是我的问题;)那么,怎么样?

1 个答案:

答案 0 :(得分:2)

将条件放在“包含”键中将过滤特定模型中的结果。

检索正确的数据 我之前回答了一个与here非常相似的问题。您只需要用自己的模型替换那里提到的模型。如果您无法理解答案,请告诉我们。

您当前模型结构的提示 我注意到您的ProjectsUser模型有一个额外的字段“projects_users_role_id”。当您的连接模型很复杂(不仅仅是id,model1_id,model2_id)时,您需要通过模型本身来表示它。它通常被称为hasMany Through关系。

User hasMany ProjectsUser
Project hasMany ProjectsUser
ProjectsUserRole hasMany ProjectsUser

ProjectsUser belongsTo User
ProjectsUser belongsTo Project
ProjectsUser belongsTo ProjectsUserRole

您还可以将“ProjectsUser”重命名为更好的“ProjectMembership”。