Главная > Coding > Миграция с данными из файла в Yii framework

Миграция с данными из файла в Yii framework

6 Июнь 2011 Михаил

migrate-439x315 Из проекта в проект, приходится зачастую таскать всякие справочники немалого размера (например справочник регионов – у меня порядка 20K записей в дереве nestedset). nike air zoom schoenen Логичнее всего грузить этот файл средствами MySQL и на помощь тут нам приходит LOAD DATA INFILE. Ну для начала неплохо бы создать файл с данными из существующей таблицы, Soldes Chaussures Nike например вот так:

SELECT * INTO OUTFILE 'region.txt' FIELDS TERMINATED BY ',' FROM tbl_region;

Ну далее полностью пример миграции таблицы с регионами:

 protected $options = 'ENGINE=InnoDB CHARSET=utf8'; public function safeUp() { $dumpfile=Yii::getPathOfAlias('application.migrations').'/region.txt'; if (file_exists($dumpfile)) { $this->createTable('{{region}}', array( 'id' => 'pk', 'created_at' => 'TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP',  <a href="http://www.fjallravenkankensale.co.uk/kanken-no-2.html">Fjallraven Kanken Sale NO.2</a> 'updated_at' => 'TIMESTAMP',  <a href="http://www.matteoricci.it/scarpe-adidas/scarpe-adidas-nmd-runner.html">Scarpe Adidas NMD Runner</a> 'lft' => 'integer not null default 0', 'rgt' => 'integer not null default 0',  <a href="http://www.lunadeigatti.it/nike-air-foamposite-donna-c-26.html">Nike Air Foamposite Donna</a> 'level' => 'integer not null default 0', 'parent_id' => 'integer not null default 0', 'name' => 'string', 'body' => 'text' ), $this->options); $this->createIndex('lft', '{{region}}', 'lft'); $this->createIndex('rgt', '{{region}}', 'rgt'); $this->createIndex('level',  <a href="http://www.angelsfanszone.com/cj-wilson-c-2_9.html">C.J. Wilson Baseball Jersey</a> '{{region}}',  <a href="http://www.aj12ovo.com/nike/kyrie-irving-all-shoes.html">Kyrie Irving All Shoes</a> 'level'); $this->createIndex('parent_id',  <a href="http://www.novaltia.org/">Nike Air Max Norge</a> '{{region}}',  <a href="http://www.marki.fr/">New Balance</a> 'parent_id'); // import file $this->execute("SET character_set_database=utf8;"); $this->execute("LOAD DATA LOCAL INFILE '{$dumpfile}' INTO TABLE {{region}} FIELDS TERMINATED BY ','"); } else return false; } public function safeDown() { $this->dropTable('{{region}}'); }

и здесь самое главное LOAD DATA LOCAL INFILE,

Categories: Coding Tags: , , ,