Как выбрать тестовую базу данных для тестирования CakePHP


Я использую команду "Выпекать торт" для создания своих приспособлений и тестовых моделей. Я успешно сделал это с одной из своих моделей, но у меня возникли проблемы с другой.

Я не знаю, почему, он пытается работать с базой данных по умолчанию, а не с тестовой, которую я уже определил, и которая использовалась первой моделью, которую я тестировал.

Обе тестовые модели, та, которая хорошо работает, и эта 2-я, которая не работает, были созданы с помощью cake bake, и они выглядят точно так же такой же.

Оба они имеют это в своем классе приспособлений:

public $import = array('records' => true, 'connection' => 'test');

Тест определяет подключение к моей тестовой базе данных. В чем может быть проблема?

Я экспериментировал с чем-то странным. В моей тестовой модели, если я использую синглуар вместо множественного числа, он работает с базой данных по умолчанию , НО, если я изменю его на множественное число, он будет работать с тестовой базой данных. (но он не может вызывать какой-либо метод из модели, только определенные методы, такие как find()).

Для пример:

public function setUp() {
    parent::setUp();

    //uses the default DB (i dont know why)
    $this->Post = ClassRegistry::init('Post');          
    print_r($this->User->find('all'));

    $this->Post->updatePostsStatus(1); //works well

    //uses the default Test Database (i dont know why either)
    $this->Post = ClassRegistry::init('Posts');         
    print_r($this->User->find('all'));   

    $this->Post->updatePostsStatus(1); //doesn't work. No function found.
    /*SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'updatePostsStatus' at line 1*/

}

Спасибо.

Я ОБНОВИЛ ЕГО.

ПОСЛЕДНЕЕ ОБНОВЛЕНИЕ И РЕШЕНИЕ

Проблема заключалась в плохой инициализации конструктора модели Post. Использование множественного числа не имело значения. Это похоже на использование любой несуществующей модели. Он всегда будет получать тестовую базу данных. Ответ на хорошую инициализацию конструктора находится здесь: Как правильно переопределить конструктор модели в CakePHP

Author: Community, 2012-04-11

1 answers

Такого рода ошибка MySQL может быть очень вводящий в заблуждение в CakePHP.

В основном фактическая проблема заключается в строке $this->Post->updatePostsStatus(1);, в частности, в том, что либо модели Post, либо метода updatePostsStatus() модели posts не существует.

У вас в основном есть опечатка в этой строке, проверьте имя метода. Должно ли это быть updatePostStatus? (нет множественного числа в сообщениях?)


По какой-то причине, если вы попытаетесь вызвать неопределенный метод для модели в CakePHP, вместо сообщая, что метод не найден, срабатывает "автоматичность" CakePHP, и, как ни странно, он пытается протолкнуть не найденное имя метода прямо в MySQL.

В основном, поскольку CakePHP не может найти метод $this->Post->updatePostsStatus(1);, он фактически пытается выполнить запрос MySQL updatePostsStatus ie mysql_query("updatePostsStatus');, поэтому мы видим эту странную ошибку базы данных. Скорее всего, вы просто неправильно написали название метода.


Если имя метода по-прежнему не является проблемой, это как-то связано с моделью Posts неправильно создается экземпляр. Хотя это кажется сомнительным, пока вы правильно записали все имена. Это определенно не проблема с базой данных, просто неудачный способ автоматической обработки неизвестных методов класса.

 1
Author: Dunhamzzz, 2012-04-16 12:44:10