Проблема с CakePHP, использующим autoModel, когда это не должно - PullRequest
0 голосов
/ 02 октября 2009

Я получаю сообщение об ошибке:

Предупреждение (512): ошибка SQL: 1054: неизвестный столбец «Model.id» в «предложении где» [CORE \ cake \ libs \ model \ datasources \ dbo_source.php, строка 525] $ sql = "SELECT Model. model_id, Model. pic_location, Model. model_name ОТ models AS Model ГДЕ Model. id = '20' LIMIT 1 " $ error = "1054: неизвестный столбец 'Model.id' в 'предложении where'" $ out = null

Моя модель, к сожалению, называется "Модель" из-за устаревшей базы данных, с которой я работаю. Я использовал debug и определил, что он использует primaryKey 'id' (как также показано в SQL выше), несмотря на то, что мой код модели (см. Ниже) явно установил primaryKey в значение "model_id".

Таблица базы данных - это модели с первичным ключом model_id, поэтому я могу только предположить, что система использует автомодель.

Код моей модели 'model.php':

    <?php class Model extends AppModel {

var $name = 'Model';
var $primaryKey = 'model_id';

//The Associations below have been created with all possible keys, those that are not needed can be removed
var $hasMany = array(
    'Pic' => array(
        'className' => 'Pic',
        'foreignKey' => 'model_name',
        'dependent' => false,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    )
);}?>

Я изначально создал вручную, и когда я нажал эту ошибку, я запек ее ... с идентичными результатами (за исключением того, что я не включил пустые поля в отношение hasMany).

Я временно отключил кеширование на уровне приложений и очистил кеш, но ничего не помогает. Как я могу заставить его использовать мой код модели?

1 Ответ

4 голосов
/ 02 октября 2009

Боюсь, вам придется переименовать вашу Model модель в другое. Ваш класс Model расширяет AppModel, что, в свою очередь, расширяет класс базовой модели, который также называется Model. Вы обязательно попадете в беду таким образом.

Если у вас есть устаревшая база данных, просто установите атрибут $useTable , чтобы использовать таблицу с именем, отличным от вашей модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...