Ошибка синтаксиса CakePHP или нарушение прав доступа

У меня есть следующие отношения Пользователи (идентификатор, имя, электронная почта, ...) фильмы (идентификатор, имя, ...) users_watchlists (идентификатор, user_id, movie_id)

Это отношения HABTM.

Ошибка

Ошибка: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1066 Неуникальная таблица/псевдоним: «UsersWatchlist»

SQL-запрос: SELECT UsersWatchlist.id, UsersWatchlist.first_name, UsersWatchlist.last_name, UsersWatchlist.display_image, UsersWatchlist.email, UsersWatchlist.password, UsersWatchlist.birthday, UsersWatchlist.gender, UsersWatchlist.group_id, UsersWatchlist.banned, UsersWatchlist.created, UsersWatchlist. modified, UsersWatchlist.id, UsersWatchlist.first_name, UsersWatchlist.last_name, UsersWatchlist.display_image, UsersWatchlist.email, UsersWatchlist.password, UsersWatchlist.birthday, UsersWatchlist.gender, UsersWatchlist.group_id, UsersWatchlist.banned, UsersWatchlist._476_, UsersWatchlist._476_. reelstubs.users КАК UsersWatchlist ПРИСОЕДИНИТЬСЯ reelstubs.users КАК UsersWatchlist ВКЛ (UsersWatchlist.movie_id = 4 И UsersWatchlist.user_id = UsersWatchlist.id)

Примечание. Если вы хотите настроить это сообщение об ошибке, создайте app\View\Errors\pdo_error.ctp.

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

    public $hasAndBelongsToMany = array(
       'UsersWatchlist' => array(
            'className' => 'Movie',
            'joinTable' => 'users_watchlists',
            'foreignKey' => 'user_id',
            'associationForeignKey' => 'movie_id',
            'unique' => 'keepExisting',
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'finderQuery' => '',
            'deleteQuery' => '',
            'insertQuery' => ''
        )
  );

Киномодель

public $hasAndBelongsToMany = array(
'UsersWatchlist' => array(
        'className' => 'User',
        'joinTable' => 'users_watchlists',
        'foreignKey' => 'movie_id',
        'associationForeignKey' => 'user_id',
        'unique' => 'keepExisting',
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'finderQuery' => '',
        'deleteQuery' => '',
        'insertQuery' => ''
    )
);

Список наблюдения пользователей

public $belongsTo = array(
    'User' => array(
        'className' => 'User',
        'foreignKey' => 'user_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
    'Movie' => array(
        'className' => 'Movie',
        'foreignKey' => 'movie_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

Не уверен, почему он пытается получить имя и т. Д. Из UsersWatchlist.


person Community    schedule 30.04.2012    source источник
comment
Похоже, у вас есть две таблицы с одинаковым именем.   -  person Sudhir Bastakoti    schedule 30.04.2012
comment
Я заметил, что вы разместили много других вопросов с той же структурой модели, но с исправлениями, которые я упомянул в своем ответе. Итак, могу ли я сделать вывод, что мой ответ помог вам?   -  person nIcO    schedule 03.05.2012


Ответы (1)


Не уверен, почему он пытается получить имя и т. Д. Из UsersWatchlist.

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

Попробуйте обновить эти имена:

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

public $hasAndBelongsToMany = array(
   'Movie' => array(
   ...

Киномодель

public $hasAndBelongsToMany = array(
   'User' => array(
   ...

Эти ключи используются в качестве псевдонимов в SQL-запросе, что в данном случае приводит к сбою.

Кстати, если вы используете таблицу данных users_watchlists только для поддержания связи между пользователями и фильмами (например, если вы не храните никаких свойств отношения), вы, вероятно, можете просто избавиться от модели UsersWatchlist.

person nIcO    schedule 30.04.2012