3

次の関係があります Users(id, name, email, ...) movies(id, name, ...) users_watchlists(id, user_id, movie_id)

HABTM 関係です。

エラー

エラー: SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1066 一意でないテーブル/エイリアス: 'UsersWatchlist'

SQL クエリ: SELECT UsersWatchlist. idUsersWatchlistfirst_nameUsersWatchlistlast_nameUsersWatchlistdisplay_imageUsersWatchlistemailUsersWatchlistpasswordUsersWatchlistbirthdayUsersWatchlistgenderUsersWatchlistgroup_idUsersWatchlistbannedUsersWatchlistcreatedUsersWatchlistmodifiedUsersWatchlistidUsersWatchlistfirst_nameUsersWatchlistlast_nameUsersWatchlistdisplay_imageUsersWatchlistemailUsersWatchlistpasswordUsersWatchlistbirthdayUsersWatchlistgenderUsersWatchlistgroup_idUsersWatchlistbannedUsersWatchlistcreatedUsersWatchlistmodifiedからreelstubsusersAS UsersWatchlistJOIN reelstubs. usersそのままUsersWatchlist(UsersWatchlist. movie_id= 4 AND UsersWatchlist. user_id= UsersWatchlist. id)

注意: このエラー メッセージをカスタマイズする場合は、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' => ''
    )
);

ユーザーウォッチリスト

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

UsersWatchlist から名前などを取得しようとしている理由がわからない

4

1 に答える 1

2

UsersWatchlist から名前などを取得しようとしている理由がわからない

呼び出された関係データテーブルのモデルがあり、UsersWatchlistUser と Movie の間の関係に同じ名前を付けたためです。

これらの名前を更新してみてください:

ユーザーモデル

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

映画モデル

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

これらのキーは SQL クエリでエイリアスとして使用されるため、この場合は失敗します。

ところで、users_watchlistsユーザーとムービーの間のリンクを維持するためだけにデータテーブルを使用する場合 (たとえば、関係に関するプロパティを保存しない場合) は、おそらくUsersWatchlistモデルを取り除くことができます。

于 2012-04-30T07:48:56.620 に答える