2016-01-28 55 views
1

這是我的實體,而我使用的gedmo註解,一個新的寄存器被創建時(persits)蛞蝓正常工作,但我怎麼能自動 - 從現有的數據庫怎樣才能蛞蝓領域從現有的數據在數據庫 - 學說的Symfony2

/** 
* @Gedmo\Slug(fields={"name"}) 
* @ORM\Column(type="string", unique=true) 
*/ 
protected $slug; 
+0

要與這個蛞蝓「堅持」究竟是什麼呢? – darkomen

+0

您需要更新'名稱'字段 - 只需堅持實體不起作用。我認爲gedmo特別傾聽命名字段的更改。否則,你不得不寫一個小功能來爲你做。 –

+0

看看這個https://knpuniversity.com/screencast/symfony2-ep3/doctrine-extensions#configuring-slug-to-be-set-automatically – Baig

回答

1

這是一個天真的Symfony命令來重新生成給定類的所有蛞蝓:

<?php 

namespace App\Command; 

use App\Entity\Foo; 
use App\Entity\Bar; 
use Doctrine\Common\Persistence\ManagerRegistry; 
use Symfony\Component\Console\Command\Command; 
use Symfony\Component\Console\Input\InputInterface; 
use Symfony\Component\Console\Output\OutputInterface; 

class RegenerateSlugs extends Command 
{ 
    private $doctrine; 

    public function __construct(ManagerRegistry $doctrine) 
    { 
     parent::__construct(); 

     $this->doctrine = $doctrine; 
    } 

    protected function configure(): void 
    { 
     $this 
      ->setName('app:regenerate-slugs') 
      ->setDescription('Regenerate the slugs for all Foo and Bar entities.') 
     ; 
    } 

    protected function execute(InputInterface $input, OutputInterface $output): void 
    { 
     $manager = $this->doctrine->getManager(); 

     // Change the next line by your classes 
     foreach ([Foo::class, Bar::class] as $class) { 
      foreach ($manager->getRepository($class)->findAll() as $entity) { 
       $entity->setSlug(null); 
       //$entity->slug = null; // If you use public properties 
      } 

      $manager->flush(); 
      $manager->clear(); 

      $output->writeln("Slugs of \"$class\" updated."); 
     } 
    } 
} 

嗨希望它可以幫助別人絆倒在這個問題!