2012-04-30 3 views
3

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

Его отношение HABTM.

Ошибка

Error: SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'UsersWatchlist'

SQL Query: 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 . created , UsersWatchlist . modified FROM reelstubs . users AS UsersWatchlist JOIN reelstubs . users AS UsersWatchlist ON (UsersWatchlist . movie_id = 4 AND UsersWatchlist . user_id = UsersWatchlist . id)

Notice: If you want to customize this error message, create 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' => '' 
    ) 
); 

UsersWatchlist

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

Не знаю, почему его пытаются извлечь имя и т.д. из UsersWatchlist

+1

Похоже, у вас есть две таблицы, которые имеют одно и то же «имя». –

+0

Я заметил, что вы отправили много других вопросов с одной и той же моделью, но содержали исправления, о которых я упоминал в своем ответе. Могу ли я сделать вывод, что мой ответ помог вам? – nIcO

ответ

2

Not sure why its trying to fetch name etc from UsersWatchlist

Потому что у вас есть модель для отношения DataTable называется UsersWatchlist и вы назвали отношения между Пользователем и кино с то же имя.

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

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

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

фильм Модель

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

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

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

Смежные вопросы