:模型递归失败

时间:2010-11-24 14:50:07

标签: cakephp model associations

我一直在用一个非常烦人的问题撞到墙上。我有两个模型类:

class User extends AppModel {
    var $name = 'User';
    var $hasMany = array(
        'Application' => array(
            'className' => 'Application',
            'foreignKey' => 'user_id',
            'dependent' => false,
        )
    );
}

class Application extends AppModel {
    var $name = 'Application';
    var $belongsTo = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'user_id',
        )
    );
}

我想拉出应用程序以及与之关联的用户字段。

   $this->Applications->find();

无论我设置$递归,它仍然只给我一个输出:

Array
(
    [Applications] => Array
        (
            [id] => 1
            [user_id] => 3
            [datecreated] => 
            [status] => 
            [source] => 1
        )

)

另一方面,当我从递归设置为2的Users表中提取数据时,我将使用应用程序的所有用户获取与应用程序关联的用户数据以及与用户关联的应用程序。简单来说,这就是我得到的:

Array
(
    [0] => Array
        (
            [User] => Array
                (
                    [id] => 3
                    [email] => email@email.email
                    [password] => hashstring
                    [socialsecurityno] => 21232134123
                    [role_id] => 3
                    [firstname] => Firstname
                    [lastname] => Lastname
                    [status] => 1
                )

            [Application] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [user_id] => 3
                            [datecreated] => 
                            [status] => 
                            [source] => 1
                            [User] => Array
                                (
                                    [id] => 3
                                    [email] => email@email.email
                                    [password] => hashstring
                                    [socialsecurityno] => 21232134123
                                    [role_id] => 3
                                    [firstname] => Firstname
                                    [lastname] => Lastname
                                    [status] => 1

                                    [Application] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [id] => 1
                                                    [user_id] => 3
                                                    [datecreated] => 
                                                    [status] => 
                                                    [source] => 1
                                                )

                                        )

                                )



                        )

                )

        )
)

我想要的是从应用程序中获取相关的用户信息,就是这样。我几乎没有想法在应用程序和用户之间建立habtm关系,这在技术上是不正确的,因为一个用户可以拥有许多应用程序,但一个应用程序只有一个用户。

现在,应用程序通过Applications表中的user_id与用户连接,这应该是显而易见的,但无论如何都应该注意。

对此有任何帮助都可以理解,我实际上是出于想法。

1 个答案:

答案 0 :(得分:0)

如果在没有参数的情况下调用Model::find,那么Cake会像对待您的请求一样对待它:

Model::find('first',array('limit'=>1));

这解释了为什么它只检索第一个应用程序。要检索所有应用程序,请将您的呼叫修改为:

$this->Application->find('all');

解释为什么Model::find忽略了模型的recursive设置,实际上,我无法找到重现该问题的方法,除非它是在设置递归级别时(例如$this->Applications->recursive = 1;),您可能会嘲笑模型名称;请注意“应用程序”的复数形式。)

希望这有帮助。