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.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 加入 reelstubs.users AS UsersWatchlist 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]:语法错误或访问冲突”

数据库错误 Cakephp

SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误 - LARAVEL

Laravel 5.8 SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误

插入记录时出现语法错误或访问冲突

语法错误或访问冲突:1064 您的 SQL 语法有错误;对应于正确语法的 MySQL 服务器版本