где я могу определить имя базы данных / таблицы в atk4? - PullRequest
0 голосов
/ 26 января 2012

В config.php я ставлю что-то вроде:

$config['dsn']='mysql://user:password@localhost/project';

Полагаю, последний параметр 'project' определяет имя базы данных в mysql. Поэтому я создал базу данных с именем «проект» с именем таблицы «продукт» в MySQL и поместил то же имя в мою модель

class Model_Product extends Model_Table {
    public $entity_code='product';
}

Я протестировал в своей локальной среде без каких-либо проблем. Но когда я загружаю свои файлы на сервер, он возвращает ошибку о том, что не может подключиться к таблице «project.Product». (Единственное отличие заключается в том, что первая буква «продукта» была заглавной). Таким образом, кажется, что коды идут с названием модели «Продукт», а не с именем таблицы, определенной в коде модели.

Я не знаю, почему это происходит, но я думаю, что единственное отличие - это версия mysql (5.5 в локальной и 5.1 в серверной части). Есть ли какое-либо решение, кроме обновления на стороне сервера MySQL? В противном случае мне придется вручную изменить название модели на class Model_product extends Model_Table и выполнить поиск и заменить. setModel('Product') до setModel('product') везде.

Ответы [ 2 ]

0 голосов
/ 29 января 2012

Да, вы можете использовать только некоторые поля в MVCForm с setModel, и вы также можете добавлять такие вещи, как подсказки, это будет выглядеть так:

 $g=$this->add('MVCForm');
    $g->setModel('Student',array('name','level','classroom'));
    $g->getElement('name')
    ->setFieldHint('Full name');
0 голосов
/ 27 января 2012

Похоже, что вы используете setSource ('Product') вместо setModel ('Product').

Функция setSource была в Agile Toolkit начиная с версии 3.0, до добавления моделей.Это позволяет грид манипулировать с базой данных напрямую.Первый аргумент для setSource указывает имя таблицы, поэтому в качестве имени таблицы используется «Product».

На локальном компьютере вы используете Windows, которая не учитывает регистр.Даже если вы выбираете из «Продукта», он выбирает данные из «продукта».Однако на вашем сервере вы используете Linux и, выбирая из «Продукта», не можете найти таблицу с таким именем.

Это связано с тем, что MySQL использует файлы для хранения таблиц для MyISAM.

Ваше исправление состоит в том, чтобы использовать setModel () и не использовать setSource до 4.2, когда он серьезно реорганизован.

...