2013-03-08 2 views
0

мне нужно присоединиться модель к себе ... но я получаю ошибку "Не уникальный стол/псевдоним: 'Image'"CakePHP модель содержит iteself

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 выше в тузде консоли второй работы.

Предложения?

+0

Зачем нужно соединение вообще? Что не так с простым выбором на поля 'id' и' thumbnail_image_id'? – Oldskool

ответ

1

Проблема в том, что вы использовали Thumbnail как в $ belongsTo, так и в $ hasOne.

Модель не будет знать, какую ассоциацию использовать для «содержать».

Переименуйте или удалите одну из ваших ассоциаций, чтобы они были уникальными.