CakePHP语法错误或访问冲突

时间:2012-04-30 07:34:36

标签: cakephp has-and-belongs-to-many cakephp-2.1

我有以下关系 用户(身份证,姓名,电子邮件,......) 电影(身份证,姓名......) users_watchlists(id,user_id,movie_id)

它是HABTM的关系。

错误

  

错误:SQLSTATE [42000]:语法错误或访问冲突:1066不是   唯一表/别名:'UsersWatchlist'

     

SQL查询:SELECT UsersWatchlistid,   UsersWatchlistfirst_nameUsersWatchlistlast_name,   UsersWatchlistdisplay_imageUsersWatchlistemail,   UsersWatchlistpasswordUsersWatchlistbirthday,   UsersWatchlistgenderUsersWatchlistgroup_id,   UsersWatchlistbannedUsersWatchlistcreated,   UsersWatchlistmodifiedUsersWatchlistid,   UsersWatchlistfirst_nameUsersWatchlistlast_name,   UsersWatchlistdisplay_imageUsersWatchlistemail,   UsersWatchlistpasswordUsersWatchlistbirthday,   UsersWatchlistgenderUsersWatchlistgroup_id,   UsersWatchlistbannedUsersWatchlistcreated,   UsersWatchlistmodified FROM reelstubsusers AS   UsersWatchlist加入reelstubsusers AS UsersWatchlist ON   (UsersWatchlistmovie_id = 4 AND UsersWatchlistuser_id =   UsersWatchlistid

     

注意:如果要自定义此错误消息,请创建   应用\视图\错误\ 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 :(得分:2)

  

不确定为什么它试图从UsersWatchlist

获取名称等

因为您有一个名为UsersWatchlist的关系数据表的模型,并且您使用相同的名称命名了User和Movie之间的关系。

尝试更新这些名称:

用户模型

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

电影模型

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

这些键在SQL查询中用作别名,在这种情况下使其失败。

顺便说一句,如果您仅使用users_watchlists数据表来维护用户和电影之间的链接(例如,如果您不存储关于该关系的任何属性),您可能只是摆脱了UsersWatchlist模型。