這是我的實體,而我使用的gedmo註解,一個新的寄存器被創建時(persits)蛞蝓正常工作,但我怎麼能自動 - 從現有的數據庫怎樣才能蛞蝓領域從現有的數據在數據庫 - 學說的Symfony2
/**
* @Gedmo\Slug(fields={"name"})
* @ORM\Column(type="string", unique=true)
*/
protected $slug;
這是我的實體,而我使用的gedmo註解,一個新的寄存器被創建時(persits)蛞蝓正常工作,但我怎麼能自動 - 從現有的數據庫怎樣才能蛞蝓領域從現有的數據在數據庫 - 學說的Symfony2
/**
* @Gedmo\Slug(fields={"name"})
* @ORM\Column(type="string", unique=true)
*/
protected $slug;
這是一個天真的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.");
}
}
}
嗨希望它可以幫助別人絆倒在這個問題!
你必須通過無塞選擇所有的數值及設定蛞蝓值設置爲null作爲描述Sluggable行爲的文檔裏面做手工生成蛞蝓文本。
https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/sluggable.md#regenerating-slug
謝謝!其作品 –
要與這個蛞蝓「堅持」究竟是什麼呢? – darkomen
您需要更新'名稱'字段 - 只需堅持實體不起作用。我認爲gedmo特別傾聽命名字段的更改。否則,你不得不寫一個小功能來爲你做。 –
看看這個https://knpuniversity.com/screencast/symfony2-ep3/doctrine-extensions#configuring-slug-to-be-set-automatically – Baig