CakePHP 语法错误或访问冲突
Posted
技术标签:
【中文标题】CakePHP 语法错误或访问冲突【英文标题】:CakePHP Syntax error or access violation 【发布时间】:2012-04-30 07:34:36 【问题描述】:我有以下关系 用户(ID,姓名,电子邮件,...) 电影(ID,名称,...) 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 和UsersWatchlist
.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' => ''
)
);
用户关注列表
public $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
'Movie' => array(
'className' => 'Movie',
'foreignKey' => 'movie_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
不知道为什么它试图从用户观察列表中获取名称等
【问题讨论】:
听起来您有两个具有相同“名称”的表。 我注意到您发布了许多具有相同模型结构的其他问题,但包含我在回答中提到的更正。所以我可以断定我的回答对你有帮助吗? 【参考方案1】:不知道为什么它试图从用户观察列表中获取名称等
因为您有一个名为 UsersWatchlist
的关系数据表模型,并且您将 User 和 Movie 之间的关系命名为相同的名称。
尝试更新这些名称:
用户模型
public $hasAndBelongsToMany = array(
'Movie' => array(
...
电影模型
public $hasAndBelongsToMany = array(
'User' => array(
...
这些键在 SQL 查询中用作别名,在这种情况下会失败。
顺便说一句,如果您仅使用 users_watchlists
数据表来维护用户和电影之间的链接(例如,如果您不存储有关关系的任何属性),您可能只需摆脱 @987654325 @模型。
【讨论】:
以上是关于CakePHP 语法错误或访问冲突的主要内容,如果未能解决你的问题,请参考以下文章
CakePHP - 调用另一个模型导致“SQLSTATE [42000]:语法错误或访问冲突”
SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误 - LARAVEL