: Рекурсия модели не удалась - PullRequest
0 голосов
/ 24 ноября 2010

Я бился головой о стену с действительно раздражающей проблемой.У меня есть два класса моделей:

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
        )

)

С другой стороны, когда я извлекаю данные из таблицы Users с рекурсивным значением 2, я получаю всех пользователей, с их приложениями, С пользовательскими данными, связанными сприложение с приложениями, связанными с пользователем.Проще говоря, вот что я получаю:

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 между приложениями и пользователями, что было бы технически некорректно, поскольку у одного пользователя может быть много приложений, но у одного приложения есть только один пользователь.

Прямо сейчас, Приложениясвязан с пользователями через user_id в таблице приложений, что ... должно быть очевидно, но, вероятно, все равно следует отметить.

Любая помощь в этом может быть оценена, у меня буквально нет идей.

1 Ответ

0 голосов
/ 24 ноября 2010

Если Model::find вызывается без параметров, Cake обрабатывает его так, как если бы вы сделали этот запрос:

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

Это объясняет, почему он получает только первое приложение.Чтобы получить все приложения, измените ваш вызов на:

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

Этот не объясняет, почему Model::find игнорирует настройку recursive модели, и, действительно, я могу 'Не можете найти способ воспроизвести эту проблему, если только это не глупо, как если бы вы указывали имя модели при настройке уровня рекурсии (например, $this->Applications->recursive = 1;; обратите внимание на множественное число «Application»).

Надеюсь, это поможет.

...