我有以下关系 用户(身份证,姓名,电子邮件,......) 电影(身份证,姓名......) users_watchlists(id,user_id,movie_id)
它是HABTM的关系。
错误
错误:SQLSTATE [42000]:语法错误或访问冲突:1066不是 唯一表/别名:'UsersWatchlist'
SQL查询:SELECT
UsersWatchlist
。id
,UsersWatchlist
。first_name
,UsersWatchlist
。last_name
,UsersWatchlist
。display_image
,UsersWatchlist
。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
。UsersWatchlist
。password
,UsersWatchlist
。birthday
,UsersWatchlist
。gender
,UsersWatchlist
。group_id
,UsersWatchlist
。banned
,UsersWatchlist
。created
,UsersWatchlist
。modified
FROMreelstubs
。users
ASUsersWatchlist
加入reelstubs
。users
ASUsersWatchlist
ON (UsersWatchlist
。movie_id
= 4 ANDUsersWatchlist
。user_id
=UsersWatchlist
。id
)注意:如果要自定义此错误消息,请创建 应用\视图\错误\ 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
获取名称等答案 0 :(得分:2)
不确定为什么它试图从UsersWatchlist
获取名称等
因为您有一个名为UsersWatchlist
的关系数据表的模型,并且您使用相同的名称命名了User和Movie之间的关系。
尝试更新这些名称:
用户模型
public $hasAndBelongsToMany = array(
'Movie' => array(
...
电影模型
public $hasAndBelongsToMany = array(
'User' => array(
...
这些键在SQL查询中用作别名,在这种情况下使其失败。
顺便说一句,如果您仅使用users_watchlists
数据表来维护用户和电影之间的链接(例如,如果您不存储关于该关系的任何属性),您可能只是摆脱了UsersWatchlist
模型。