【问题标题】:Contain Behavior, conditions and empty array包含行为、条件和空数组
【发布时间】:2011-05-22 22:01:40
【问题描述】:

我有下一个问题。

有部分代码:

        $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 也可以,但这不是我的问题;)那么,如何?

【问题讨论】:

    标签: cakephp model behavior contains


    【解决方案1】:

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

    检索正确的数据 我之前回答过一个与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”等更好的名称。

    【讨论】:

    • 谢谢!结果,我使用 unbindModel/bindModel 创建连接并包含结果数组过滤。
    猜你喜欢
    • 2012-12-16
    • 2016-07-14
    • 2015-04-03
    • 2011-11-03
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多