2015-02-01 4 views
9

Я использую phinx для обработки миграции на новый проект, теперь мне нужно создать новую таблицу и вставить несколько строк в нем, у меня есть:Как написать миграцию для вставки записей с помощью phinx?

$tableStatus = $this->table('status'); 
$tableStatus->addColumn('code', 'string'); 
$tableStatus->addColumn('description', 'string'); 
$tableStatus->save(); 

Это добавить новую таблицу, но я не мог» т найти в документации, как вставить строки, но это представляется возможным:

AbstractMigration класс Все Phinx миграция простирается от класса AbstractMigration. Этот класс обеспечивает необходимую поддержку: создает миграцию базы данных. Миграции баз данных могут преобразовывать в вашу базу данных различными способами, такими как создание новых таблиц, , вставка строк, добавление индексов и изменение столбцов.

Это возможно? Как мне это сделать?

ответ

12

Как igrossiter отметил, существует способ для этого, название метода вставки

use Phinx\Migration\AbstractMigration; 

class NewStatus extends AbstractMigration 
{ 
    protected $statusId = 1234; //It'd be nice to use an entity constant instead of magic numbers, but that's up to you. 
    protected $statusName = 'In Progress'; 

    /** 
    * Migrate Up. 
    */ 
    public function up() 
    { 
     $columns = ['id', 'name']; 
     $data = [[$this->statusId, $this->statusName]]; 
     $table = $this->table('status'); 
     $table->insert($columns, $data); 
     $table->saveData(); 
    } 

    /** 
    * Migrate Down. 
    */ 
    public function down() 
    { 
     $this->execute('Delete from status where id = ' . $this->statusId); 
    } 
} 

Редактировать как 2-го декабря 2015

подпись этого метода изменится в будущих стабильных версиях к чему-то вроде

$data = [ 
    ['id' => 1, 'name' => 'foo'], 
    ['id' => 2, 'name' => 'bar'] 
]; 
$table = $this->table('status'); 
$table->insert($data); 

Больше info here

9

Вы можете это сделать. Прочтите документацию для получения дополнительной информации.

http://docs.phinx.org/en/latest/migrations.html#executing-queries

use Phinx\Migration\AbstractMigration; 

class MyNewMigration extends AbstractMigration 
{ 
    /** 
    * Migrate Up. 
    */ 
    public function up() 
    { 
     // execute() 
     $count = $this->execute('insert into users(id, name) values (5, "john")'); 
    } 

    /** 
    * Migrate Down. 
    */ 
    public function down() 
    { 

    } 
} 
+1

я что-то вроде '$ table-> Вкладыш в надежде (array ('column' => 'value')); 'но это сработало, спасибо! – igrossiter

-2

This question имеет good answer с помощью CakePHP 3 По Migrations плагин:

public function up() { 
    // Save records to the newly created schema 
    $UsersTable = TableRegistry::get('Users'); 
    $user = $UsersTable->newEntity(); 

    $user->name = 'Joe Bloggs'; 
    $user->email = '[email protected]'; 

    $UsersTable->save($user); 
} 
+5

Вопрос не в CakePHP –

Смежные вопросы