0

モデルをそれ自体に結合する必要があります...しかし、「一意のテーブル/エイリアスではありません:'画像'」というエラーが表示されます

Imageスキーマ:

id: int
thumbnail_image_id: int null
key: varchar... filename
location: varchar... s3 or local
created: datetime
modified: datetime

Imageモデル:

<?php
App::uses('AppModel', 'Model');

class Image extends AppModel {

    public $belongsTo = array(
        'Thumbnail' => array(
            'className' => 'Image',
            'foreignKey' => 'thumbnail_image_id'
        )
    );

    public $hasOne = array(
        'Thumbnail' => array(
            'className' => 'Image',
            'foreignKey' => 'thumbnail_image_id'
        )
    );

    public function exampleFunction() {
        return $this->find('all', array(
            'contain' => array('Thumbnail')
        ));
    }

それを実行exampleFunctionすると、「一意のテーブル/エイリアスではありません:'画像'」というエラーが表示されます。CakePHPは次のよ​​うにSQLを構築します:

SELECT `Image`.`id`, `Thumbnail`.`id` FROM `images` AS `Image` LEFT JOIN `images` AS `Image`.`thumbnail_image_id` = `Thumbnail`.`id`;

でもこういうはずなのに…そうですか?(反転に注意してONください):

SELECT `Image`.`id`, `Thumbnail`.`id` FROM `images` AS `Image` LEFT JOIN `images` AS `Thumbnail`.`id` = `Image`.`thumbnail_image_id`;

上記の両方のSQLクエリをmysqlコンソールで実行すると、2番目が機能します。

提案?

4

1 に答える 1

1

問題は、$belongsToと$hasOneの両方でThumbnailを使用していることです。

モデルは、「含む」にどの関連付けを使用するかを認識しません。

関連付けの名前を変更するか削除して、関連付けが一意になるようにします。

于 2013-03-09T12:07:41.133 に答える