CakePHP模型包含自己

时间:2013-03-08 21:29:29

标签: cakephp join model cakephp-2.1

我需要将模型加入到自身......但我收到错误“Not unique table / alias:'Image'”

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它会给我一个错误“Not unique table / alias:'Image'”。 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`;

如果我在mysql控制台中运行上面的两个SQL查询,则第二个工作。

建议?

1 个答案:

答案 0 :(得分:1)

问题是您在$ belongsTo和$ hasOne中都使用了Thumbnail。

模型将不知道用于'包含'的关联。

重命名或删除您的一个关联,以便它们是唯一的。