2013-10-21 13 views
15

ファイル:使用するEntityManagerは、私はこのコードを持っていますが、動作しません

<?php 

namespace Application\Migrations; 

use Doctrine\DBAL\Migrations\AbstractMigration, 
    Doctrine\DBAL\Schema\Schema; 

/** 
* Auto-generated Migration: Please modify to your need! 
*/ 
class Version20131021150555 extends AbstractMigration 
{ 

    public function up(Schema $schema) 
    { 
     // this up() migration is auto-generated, please modify it to your needs 
     $this->abortIf($this->connection->getDatabasePlatform()->getName() != "mysql", "Migration can only be executed safely on 'mysql'."); 

     $this->addSql("ALTER TABLE person ADD tellphone LONGTEXT DEFAULT NULL"); 

     $em = $em = $this->getDoctrine()->getEntityManager(); 
     $persons = $em->getRepository('AutogestionBundle:Person')->fetchAll(); 

     foreach($persons as $person){ 
      $person->setTellPhone($person->getCellPhone()); 
      $em->persist($person);                    
     } 
     $em->flush(); 
    } 

    public function down(Schema $schema) 
    { 
     // this down() migration is auto-generated, please modify it to your needs 
     $this->abortIf($this->connection->getDatabasePlatform()->getName() != "mysql", "Migration can only be executed safely on 'mysql'."); 

     $this->addSql("ALTER TABLE person DROP tellphone"); 
    } 
} 

私は新しいフィールドtellphoneに携帯電話で情報を追加しています。

おかげ

+0

を参照してください。これらのメソッドはどのように呼び出されますか?期待される結果と現在の結果は何ですか? – ferdynator

+0

この行にはエラーが発生します $ em = $ this-> getDoctrine() - > getEntityManager(); このファイルにEntityManagerを使用する必要があります。 ありがとう – Zarpele

+0

$ this-> getDoctrine()を呼び出すため、AbstractMigrationクラスにはこのメソッドがありません。 – zuzuleinen

答えて

36

これは古い投稿かもしれませんが、その間に問題は解決され、実際には現在のドキュメントの一部です。

は、あなたが '動作しない' とはどういう意味ですかhttp://symfony.com/doc/current/bundles/DoctrineMigrationsBundle/index.html#container-aware-migrations

// ... 
use Symfony\Component\DependencyInjection\ContainerAwareInterface; 
use Symfony\Component\DependencyInjection\ContainerInterface; 
use Symfony\Component\DependencyInjection\ContainerAwareTrait; 

class Version20130326212938 extends AbstractMigration implements ContainerAwareInterface 
{ 
    use ContainerAwareTrait; 

    public function up(Schema $schema) 
    { 
     // ... migration content 
    } 

    public function postUp(Schema $schema) 
    { 
     $em = $this->container->get('doctrine.orm.entity_manager'); 
     // ... update the entities 
    } 
} 
5

あなたはpostUp()方法であなたの変更を呼び出す必要があります - addSql()からup()メソッドが完了した後のステートメントが実行されますので、あなたの新しい行が(すなわちtellphone)up()方法の間には使用できません!

関連する問題