代码之家  ›  专栏  ›  技术社区  ›  Edgar Alfonso

如何从数据库中的现有数据生成slug字段-Doctrine Symfony2

  •  4
  • Edgar Alfonso  · 技术社区  · 9 年前

    这是我的实体,我使用了一个gedmo注释,当创建一个新的寄存器(perists)时,slug正常工作,但我如何从现有数据库自动生成slug文本

     /**
     * @Gedmo\Slug(fields={"name"})
     * @ORM\Column(type="string", unique=true)
     */
    protected $slug;
    
    2 回复  |  直到 9 年前
        1
  •  5
  •   Benoît    9 年前

    您必须手动选择所有没有slug的值,并将slug值设置为null,如Sluggable Behavior文档中所述。

    https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/sluggable.md#regenerating-slug

        2
  •  3
  •   BroodjeBE    3 年前

    下面是一个简单的Symfony命令,用于重新生成给定类的所有slug:

    <?php
    
    namespace App\Command;
    
    use App\Entity\Foo;
    use App\Entity\Bar;
    use Doctrine\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;
    
        protected static $defaultName = "app:regenerate-slugs";
    
        public function __construct(ManagerRegistry $doctrine)
        {
            parent::__construct();
    
            $this->doctrine = $doctrine;
        }
    
        protected function configure(): void
        {
            $this
                ->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.");
            }
        }
    }
    

    嗨,希望它能帮助一些在这个问题上犯错误的人!