Я использую CakePHP, и я получаю следующую ошибку!
Что из-за
ON (`Trip`.`city_id` = `City`.`id`)
Должно быть
(`City'.`city_id` = `Trip`.`id`)
Как я могу исправить это?
Ошибка: SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец «Trip.city_id» в «предложении»
SELECT `Trip`.`id`, `Trip`.`user_id`, `Trip`.`type_id`, `Trip`.`title`, `Trip`.`city1`, `Trip`.`city2`, `Trip`.`date`, `Trip`.`free_places`, `Trip`.`description`, `Trip`.`contact_email`, `Trip`.`created`, `City`.`city_id`, `City`.`city_name` FROM `mitfahr-ar`.`trips` AS `Trip` LEFT JOIN `mitfahr-ar`.`cities` AS `City` ON (`Trip`.`city_id` = `City`.`id`) WHERE 1 = 1
Код моей модели:
<?php
class Trip extends AppModel
{
public $name= 'Trip';
public $belongsTo= array('City');
}
?>
[….] Это потому чтоON (`Trip`.`city_id` = `City`.`id`)
Должно быть
(`City'.`city_id` = `Trip`.`id`)
Нет, не должно, последнее не имеет никакого смысла, `City`.`city_id`
будет означать самостоятельное присоединение, и в любом случае один город может быть связан только с одной другой записью, что не имеет смысла нормализация мудрый.
Прежнее выражение, сгенерированное CakePHP, абсолютно правильно, в belongsTo
Ассоциация, внешний ключ удерживается текущей моделью.
Увидеть http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#belongsto
Чтобы исправить проблему, добавьте правильную city_id
внешний ключ к вашему trips
Таблица.
ON (
Trip
,city_id
знак равноCity
,id
)
Выше запрос из-за того, как вы связываете модели.
Так как в вашей ниже ассоциации:
<?php
class Trip extends AppModel
{
public $name= 'Trip';
public $belongsTo= array('City');
}
?>
Вы не определяете какой-либо внешний ключ, следовательно, в соответствии с соглашениями о CakePHP, он будет автоматически искать поле ‘city_id’, и вы создали его, а значит, и запрос.
Решение:
Вы должны определить атрибут внешнего ключа в вашей ассоциации.