Отношение Cakephp hasManyThrough дважды используется user_id - PullRequest
0 голосов
/ 20 октября 2011

Я создал таблицу hasManyThrough, как показано ниже:

id user_id friend_id

У меня также есть таблица пользователей, как показано ниже: id username password

Я хочу, чтобы и user_idfriend_id принадлежит к столбцу id пользователя.Итак, я написал ниже две модели:

Модель друга

class Friend extends AppModel {
    var $name = 'Friend';
    //The Associations below have been created with all possible keys, those that are not needed can be removed

        var $belongsTo = array(
            'User' => array(
                'className' => 'User',
                'foreignKey' => 'user_id',
                'conditions' => '',
                'fields' => '',
                'order' => ''
            ),
            'Friend' => array(
                'className' => 'User',
                'foreignKey' => 'friend_id',
                'conditions' => '',
                'fields' => '',
                'order' => ''
            )
        );
    }

Модель пользователя

class User extends AppModel {
    var $name = 'User';
    var $displayField = 'username';
var $hasMany = array(
        'User' => array(
            'className' => 'Friend',
            'foreignKey' => 'user_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        ),
        'Friend' => array(
            'className' => 'Friend',
            'foreignKey' => 'friend_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );
}

Я не уверен почему, но когда я пытаюсь просмотреть это черезконтроллер в лесах, он приходит с ошибкой 500 сервера ??Что-то не так с конфигурацией модели, которая создает неправильный SQL?

ОК, похоже, ошибка произошла из-за Zend Optimizer, согласно некоторым форумам.Это создает ошибку сегментации при выпекании!

Я не могу отключить это на стороннем размещенном сервере, поэтому мне, возможно, придется перейти на локальный сервер и протестировать, чтобы я мог видеть ошибки Cake.

Хорошо, ниже приведена ошибка (она очень длинная, поэтому я не собираюсь помещать все, но ниже даются некоторые идеи):

Fatal error: Maximum function nesting level of '100' reached, aborting! in /usr/share/php/cake/libs/debugger.php on line 248 Call Stack: 0.0011 352048 1. {main}() 

Ответы [ 2 ]

0 голосов
/ 21 октября 2011

Посмотрите на мой ответ в CakePHP Твиттер-клон: Не удается заставить работать систему слежения .То же самое, но с друзьями, а не с подписчиками.

Вы просто создаете таблицу user_users с полем user_id (идентификатор пользователя) и child_user_id (идентификатор друга), вы можете снова использовать таблицу user_users, чтобы создать аналогичные отношениянапример, пользователь HABTM подписчиков, пользователь HABTM подписчиков

Извините за поздний ответ, я думал, что опубликовал ответ день назад, но, очевидно, он не опубликовал.

0 голосов
/ 20 октября 2011

Скорее всего, проблема возникает из-за вложенности конструкции Friend Model и возникает из-за использования одинакового псевдонима Friend для таблицы User и Friend. Вот что я думаю:

  1. Инициализируемая модель друга, которая в своих конструкциях во время привязки модели инициализирует модель пользователя.
  2. Теперь, когда модель пользователя инициализируется, во время процесса привязки она пытается связать модель друга с псевдонимом как пользователь, но из-за использования шаблона Singleton в моделях, вместо экземпляра модели друга ClassRegistry возвращает экземпляр пользователя, в результате чего получается модель пользователя привязка к себе.

Точно так же имеет место, когда пользователь инициализируется первым. Измените псевдоним отношений, таких как Friend_2, или что-то еще, т.е. не повторять псевдоним в модельных отношениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...