2016-05-11 12 views
2

Ich arbeite an einem Projekt in Symfony2 mit einer Legacy-Datenbank, die eine Zeichenfolge verwendet, um eine 6-stellige 'Franchisee_number' mit floating 0 auf der Vorderseite - z. 000123. Wenn ich versuche, die Entität zu leeren, erhalte ich einen Fehler, der die SQL-Anweisung anzeigt, die sie versucht hat, und sie versucht nicht einmal, mein Primärschlüsselfeld einzufügen. Bis zu dem Punkt, an dem die Entity geleert wird, wird die 'franchisene_id' in der Entity angezeigt, also gehe ich davon aus, dass Doctrine den Primärschlüssel nicht festlegen, sondern generieren lassen möchte.Symfony2 Entität wird nicht mit benutzerdefinierten Primärschlüssel

Mein Problem ist dieser Frage sehr ähnlich: when flush() primary key does not get inserted, aber ich habe die Antworten ausprobiert, und sie funktionieren nicht. Hier

ist der Code von meinem Entity für das ‚franchisee_number‘ Feld:

/** 
* @var string 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="NONE") 
* @ORM\Column(name="franchisee_number", type="string", length=255, nullable=false) 
* 
*/ 
private $franchiseeNumber; 

ich davon aus, dass @ORM\GeneratedValue(strategy="NONE") Lehre sagen würde ich meinen eigenen Wert in das Feld eingefügt, und nicht versuchen, sie zu erzeugen.

Und mein Controller-Code

public function createAction(Request $request) 
{ 
    $this->denyAccessUnlessGranted('ROLE_ADMIN'); 
    $entity = new Accounts(); 
    $form = $this->createCreateForm($entity); 
    $form->handleRequest($request); 
    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getManager('inertia'); 
     $em->persist($entity); 
     $em->flush(); 
     return $this->redirect($this->generateUrl('accounts_show', array('id' => $entity->getId()))); 
    } 

    return $this->render('InertiaBundle:Accounts:new.html.twig', array(
     'entity' => $entity, 
     'form' => $form->createView(), 
    )); 
} 

ich auch dort sorgte dafür, dass im Bundle/Ressourcen/config/Lehre Verzeichnis keine XML-Konfigurationsdateien wurden.

Vielen Dank im Voraus für die Hilfe!

Antwort

0

Ich habe viel Zeit verschwendet, um das herauszufinden, und konnte keine wirklich gute Antwort finden. Ich entschied mich einfach, es auf die harte Tour zu machen und schrieb eine benutzerdefinierte Abfrage mit Doctrine DBAL, inspiriert von dieser Frage/Antwort: https://stackoverflow.com/a/15650290/1647183

Es funktioniert wie ein Charme für mich!

0

Wenn Sie strategy="NONE" verwenden, müssen Sie einen Bezeichner in __construct oder einem anderen System vor persist/flush entity erstellen.

Beispiel:

class MyEntity 
{ 
    /** 
    * @var string 
    * 
    * @ORM\Id 
    * @ORM\Column(type="string", name="id") 
    * @ORM\GeneratedValue(strategy="NONE") 
    */ 
    private $id; 

    public function __construct() 
    { 
     $this->id = 123; // Inject you custom ID here! 
    } 
} 
+0

mir verzeihen, wenn ich naiv bin, aber mit dieser Methode ist es sogar möglich, die ID auf die Daten von meiner Form zu setzen? Ich bin ziemlich neu in Symfony, also könnte ich hier völlig falsch liegen, aber das sieht ziemlich statisch aus. Ich schaute Schritt für Schritt durch meinen Code, indem ich die Entität $ auskippte und durch die Daten schaute, und es ist alles intakt durch die Persistenz. Es ist nur beim Spülen, dass es Probleme hatte. Ist das sinnvoll? – chrislebaron

Verwandte Themen