как через xPDO обратится к своим таблицам
СУТЬ ПРОБЛЕМЫ: Таблица в базе с префиксом taxi_.
Создал 2 таблицы с префиксом taxi_ (taxi_routes, taxi_orders). Сделал по ним модель, схему, кое как разобрался с подготовкой к работе с таблицей через xpdo. В core/components создал папку taxi и сделал все как описано в статье. Проблемы были в отсутствии в папке model файла taxi.class.php. Видимо он куда то делся при генерации модели базы и схемы ( а может и я там успел покопаться)
К странице сайта подключаю снипет со следующим кодом:
$new_route = $modx->newObject('Routes');
выдает ошибку что таблица modx_routes не найдена. Как указать что мне надо с другим префиксом!Создал 2 таблицы с префиксом taxi_ (taxi_routes, taxi_orders). Сделал по ним модель, схему, кое как разобрался с подготовкой к работе с таблицей через xpdo. В core/components создал папку taxi и сделал все как описано в статье. Проблемы были в отсутствии в папке model файла taxi.class.php. Видимо он куда то делся при генерации модели базы и схемы ( а может и я там успел покопаться)
К странице сайта подключаю снипет со следующим кодом:
<?php
$taxi = $modx->getService('taxi','Taxi',$modx->getOption('taxi.core_path',null,$modx->getOption('core_path').'components/taxi/').'model/taxi/',$scriptProperties);
if (!($taxi instanceof Taxi)) return '';
/* setup default properties */
$tpl = $modx->getOption('tpl',$scriptProperties,'rowTpl');
$sort = $modx->getOption('sort',$scriptProperties,'name');
$dir = $modx->getOption('dir',$scriptProperties,'ASC');
$output=array();
$output[] = '<b>Проверка на наличие таблицы маршрутов:</b>';
$tablexists = $modx->query("SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '".$modx->getOption('dbname')."' AND table_name = 'taxi_routes'");
if(!$tablexists->fetch(PDO::FETCH_COLUMN)){
$m = $modx->getManager();
$created = $m->createObjectContainer('Routes');
$output[]="Таблица создана";
}else $output[]="Таблица найдена";
$output[] = '<b>Проверка на наличие таблицы заказов такси:</b>';
$tablexists = $modx->query("SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '".$modx->getOption('dbname')."' AND table_name = 'taxi_orders'");
if(!$tablexists->fetch(PDO::FETCH_COLUMN)){
$m = $modx->getManager();
$created = $m->createObjectContainer('Orders');
$output[]="Таблица создана";
}else $output[]="Таблица найдена";
return implode($output,"
");
Запускаю на выполнение, все вроде бы проходит нормально! На экране показывается Проверка на наличие таблицы маршрутов:
Таблица найдена
Проверка на наличие таблицы заказов такси:
Таблица найдена
Ошибок в журнале нет, все хорошо. Далее пишу чтение или запись в базу, и тут пошли ошибки://Обращение к таблице
$routes = $modx->getCollection('Routes');
$output[] = '
<b>Доступные маршруты: '.count($routes).'</b>';
$new_route = $modx->newObject('Routes');
$new_route->fromArray(array(
'from' => 'Пункт А',
'to' => 'Пункт Б',
'distance'=>300,
'price1'=>10,
'price2'=>20,
'price3'=>30
));
$new_route->save();
В журнале пишет что не может найтись таблица modx_routes. Как указать что мне надо с префиксом taxi_routes?[2014-01-29 14:34:26] (ERROR @ /index.php) Error 42S02 executing statement:
Array
(
[0] => 42S02
[1] => 1146
[2] => Table 'compse2m_modx1.modx_routes' doesn't exist
)
Комментарии: 2
Префикс задается в addPackage
$modx->addPackage('mypkg',MODX_CORE_PATH.'components/mypkg/model/','mypkg_');
$modx->addPackage('mypkg',MODX_CORE_PATH.'components/mypkg/model/','mypkg_');
Огромное спасибо! Все заработало. а у меня было указано без 3 параметра!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.