Ich musste in eine existierende Entity ein Slug-Feld einfügen, um das Feld 'name' zu verschieben. Aber es gibt bereits Daten in dieser Entität und ich kann sie nicht löschen.Symfony Doctrine Sluggable Erweiterung in existierende Datenbank
Ich möchte ein Konsolenskript erstellen, das alle meine "Name" -Feld schlüsseln kann.
Ich weiß nicht, wie es zu tun, weil dies nicht eine Insertion ist aber nur ein Update ...
class SlugCommand extends ContainerAwareCommand
{
protected function configure()
{
$this
->setName('generate:geo:slug')
->setDescription('Slug generation for GeoBundle ');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$em = $this->getContainer()->get('doctrine')->getManager();
$regions = $em->getRepository('FMGeoBundle:Region')->findAll();
if($regions === null){
throw new Exception('No Region found');
}
foreach($regions as $region){
// ????? Generate the slug here ??
$em->persist($region);
}
$em->flush();
$output->writeln('Slugs Generated ;) ...');
}
}
Das 'Slug' Feld in meiner Einheit:
/**
* @var string
*
* @ORM\Column(name="slug", type="string", length=255)
* @Gedmo\Slug(fields={"name"})
*/
protected $slug;
Das war meine Antwort ... Aber Sie müssen Ihre Slug URL freundlich machen => preg_replace, und es einzigartig zu machen => Abfrage – Alsatian
Aber die Doctrine Sluggable Erweiterung kümmert sich schon darum, oder? – Kevin
Sie sind richtig für die Einzigartigkeit, aus der Dokumentation: "Manchmal müssen Sie es möglicherweise manuell einstellen, usw., wenn erzeugt wird, sieht nicht zufriedenstellend genug aus. Sluggable wird die Eindeutigkeit des Slugs gewährleisten." Es wird also auf Eindeutigkeit geprüft, aber sie werden nicht wie in der Erweiterung erzeugt (niedriger, ohne Leerzeichen ...) – Alsatian