0

我已经开始使用CakePHP (1.3) 编写一个项目,并且发现使用 CakePHP 查询风格返回结果很困难。

该项目是一个问题跟踪器。到目前为止,我只有以下表格 - 'users'、'projects' 和链接表 'projects_users',因为任何用户都可以与一个或多个项目相关联。还有一个链接到项目表的“状态”表。

我已经在模型中建立了关联。

我正在尝试为那些登录的人返回一个摘要页面,显示项目名称、由登录过滤的项目状态user_id。如果我在 SQL 中执行此操作,那么我将执行以下操作。

SELECT
  `statuses`.name,
  `projects`.name
FROM
  `statuses`
  INNER JOIN `projects` ON (`statuses`.id = `projects`.status_id)
  INNER JOIN `projects_users` ON (`projects`.id = `projects_users`.project_id)
  INNER JOIN `users` ON (`projects_users`.user_id = `users`.id)
WHERE
  `users`.id = 1

$this->Project->find('all'))返回所有项目、状态详细信息和用户详细信息。

    Array
    (
        [0] => Array
            (
                [Project] => Array
                    (
                        [id] => 1
                        [name] => Project 1
                        [status_id] => 2
                        [date_created] => 0000-00-00
                    )

                [Status] => Array
                    (
                        [id] => 2
                        [name] => Live
                    )
                [User] => Array
                    (
                        [0] => Array
                            (
                                [id] => 1
                                [username] => d
                                [password] => ********************************
                                [role] => master
                                [ProjectsUser] => Array
                                    (
                                        [id] => 1
                                        [project_id] => 1
                                        [user_id] => 1
                                    )
                            )
                    )
            )

Etc..

我也试过

$this->Project->find('all', array('conditions'=>array('User.id' => $this->Session->read('Auth.User.id'))))

返回错误:

'where 子句'中的未知列'User.id'

如果我尝试

$this->Project->User->find('all', array('conditions'=>array('User.id' => $this->Session->read('Auth.User.id'))))

它正确返回与 user_id 关联的所有项目,但现在我不再返回 status 的值,只返回 id。

Array
(
    [0] => Array
        (
            [User] => Array
                (
                    [id] => 1
                    [username] => d
                    [password] => ********************************
                    [role] => master
                )

            [Project] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [name] => Project 1
                            [status_id] => 2
                            [date_created] => 0000-00-00
                            [ProjectsUser] => Array
                                (
                                    [id] => 1
                                    [project_id] => 1
                                    [user_id] => 1
                                )
                        )
                    [1] => Array
                        (
                            [id] => 3
                            [name] => Project 3
                            [status_id] => 1
                            [date_created] => 0000-00-00
                            [ProjectsUser] => Array
                                (
                                    [id] => 2
                                    [project_id] => 3
                                    [user_id] => 1
                                )
                        )
                )
        )
)

有没有一种方法可以轻松地返回“CakePHP”之后的内容?我确定我在这里遗漏了一些明显的东西。

4

2 回答 2

0

返回错误 - 'where 子句'中的未知列'User.id'

您的表名是users。复数。你通过它的东西没有users

于 2010-07-12T21:39:24.540 回答
0

你想要这样的东西:

$this->Project->User->find(
    'all',
    array(
        'conditions' => array(
            'User.id' => $this->Session->read('Auth.User.id')
        ),
        'contain' => array(
            'Project' => array(
                'Status'
            )
        )
    )
);

我可能把你的关系搞错了,但这应该可以解决问题。这containable是你想要的。containable是核心库,但不会加入。如果您真的想要加入,Google 可以为您找到一个可链接的行为。

于 2010-07-13T20:47:58.497 回答