1 Отредактировано Дмитрий (17.01.2015 16:35:00)

Тема: Миграции

Собственно вопрос. Как делаются миграции вашим фреймворком (бд)?
-- Прошу извинить, не в ту ветку запостил

Повысить оценку Понизить оценку

2

Re: Миграции

Для переноса данных с другого магазина, можно воспользоваться внешними инструментами, доступными в админ. панели (CSV). Если вы хотите произвести перенос данных на низком уровне (БД), то вам необходимо написать скрипт переноса данных. В фреймворке ReadyScript есть 2 уровня, на котором можно работать со вставками - БД:

1. Это уровень SQL запросов - класс \RS\Db\Adapter

\RS\Db\Adapter::sqlExec("INSERT INTO table(a,b) VALUES('#a', '#b')", array('a' => 'значение А', 'b' => 'значение B'));

2. Это уровень ORM объектов.(рекомендуемый уровень). в данном случае вы будете оперировать понятием объект.
Например, если необходимо вставить товар, то вставка должна происходить так:

$product = new \Catalog\Model\Orm\Product;
$product['title'] = 'Название товара';
$product['alias'] = 'URL имя товара';
$product['xdir'] = array('ID категории', 'ID другой категории, если нужно');
$product['xcost'] = array(
   'ID типа цен' => 'Цена',
   'ID типа цен2' => 'Цена2'
);
$product['maindir'] = 'ID главной категории';
//...
if ($product->insert()) {
     //Товар добавлен, ID товара - $product['id'];
}

Повысить оценку Понизить оценку

Re: Миграции

А как насчет структуры таблиц? Например мне на локале надо написать доп. модуль. Я вношу изменения в таблицу например ****_products, как мне эти изменения перенести на глобал? Можно сделать SQL запросами, но думаю на уровне Orm будет лучше. Присутствует ли в RS такой функционал и как его использовать?

Повысить оценку Понизить оценку

4

Re: Миграции

Да, для данной задачи в ReadyScript есть уникальное решение. Разработчику - никогда не нужно лезть в базу, чтобы добавлять или обновлять какие-либо поля в базе.

Вы просто изменяете описание Orm объектов.
Например с помощью обработки необходимого события в вашем модуле
http://readyscript.ru/dev-manual/dev_or … orm_events

Потом заходите в раздел Веб-сайт->Настройка модулей. Выбираете ваш модуль и нажимаете "Переустановить модуль". Установщик сам найдет все ORM объекты модуля и приведет структуру БД в соответствие с описанием ORM объекта.

То есть для синхронизации локальной версии сайта и удаленного сайта,
нужно просто перекинуть файл с классом ORM объекта, например product.inc.php на боевой сервер и "Переустановить модуль", описанным выше образом.

Повысить оценку +1 Понизить оценку