2017-01-29 10 views
0

Мне интересно, есть ли лучший (более гладкий) способ отключить проверку внешнего ключа, обрезать таблицу, вставить данные и включить проверку внешнего ключа при выгрузке базы данных cakephp 3. Это мой текущий код, который не работаетУсекающий стол перед посевом в cakephp

<?php 
use Migrations\AbstractSeed; 
use Cake\Datasource\ConnectionManager; 

/** 
* Categories seed. 
*/ 
class CategoriesSeed extends AbstractSeed 
{ 
    public function run() 
    { 
     $connection = ConnectionManager::get('default'); 
     $connection->execute('SET FOREIGN_KEY_CHECKS = 0'); 
     $connection->execute('TRUNCATE table categories'); 

     $data = [ 
      ['id' => 1, 'name' => 'Audio, video & photo', 'parent' => 0, 'alias' => 'audio-video-and-photo', 'image' => ''], 
      ['id' => 2, 'name' => 'Music players', 'parent' => 1, 'alias' => 'music-players', 'image' => ''], 
      ['id' => 3, 'name' => 'Musical instruments', 'parent' => 1, 'alias' => 'musical-instruments', 'image' => ''], 
     ]; 

     $table = $this->table('categories'); 
     $table->insert($data)->save(); 
     $connection->execute('SET FOREIGN_KEY_CHECKS = 1'); 
    } 
} 

Есть ли способ, поэтому мне не нужно использовать ConnectionManager? Возможно ли это при использовании AbstractSeed, например:

$table = $this->table('categories'); 
$table->query('SET FOREIGN_KEY_CHECKS = 0'); 
$table->truncate(); 

Каков ваш способ решения этой проблемы?

ответ

2

Использование диспетчера соединений CakePHPs создаст новое отдельное соединение с базой данных, то есть тот, который используется для посева, не будет затронут.

Как и миграции, семена основаны на Phinx, поэтому вы можете просто использовать предоставленные им функции, например \Phinx\Seed\AbstractSeed::execute() для запуска пользовательского SQL.

$this->execute('SET FOREIGN_KEY_CHECKS = 0'); 
$this->execute('TRUNCATE TABLE categories'); 

$table = $this->table('categories'); 
$table->insert($data)->save(); 

$this->execute('SET FOREIGN_KEY_CHECKS = 1'); 

Смотрите также

+0

Nice! Спасибо за помощь! –