• Willkommen im Zend Framework Forum

    ZF1 Zend Framework 1 + ZF2 Zend Framework 2

    Das Zend Framework Forum ist seit 2006 die erste Anlaufstelle für Zend Framework Entwickler in Deutschland. Mit über 70.000 Beiträgen und einer steigenden Nutzerzahl bietet das Forum hilfreiche Themen und ZF-Tutorials für professionelle Entwickler, fortgeschrittene Programmierer sowie Zend Framework Einsteiger.
    Wenn dies Dein erster Besuch in der Zend Framework Community ist, lies bitte zuerst die Hilfe - FAQ durch. Du musst Dich registrieren, bevor Du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um die Registrierung zu starten. Du kannst auch jetzt schon Beiträge lesen. Hier im Forum findest Du die Zend Framework Hilfe, die Du suchst!

    Grüße an alle Zend Framework Entwickler. Das Team vom Zend Framework Forum!

    Drupal Agentur

Doctrine - Relationen - Allgemeines Verständnis

sodiummd

New member
Hi,

ich steh mal komplett auf dem Schlauch un bräuchte einfach mal ne Erklärung für Dumme.

Ich habe eine Tabelle A (bspw. Benutzer) und eine Tabelle B (zusätzliche Attribute)

Tabelle A: user_id, username, xxx
Tabelle B: value_id, attribute_id, entity_id (enthält die User ID), value

Wie müsste nun die Relation aussehen, wenn die User Entität zusätzlich noch alle Attribute haben soll?! Ich kriege es einfach nicht hin und bin für jede Anregung echt dankbar!
Als einfach SQL Anweisung krieg ich es problemlos hin, aber Doctrine bereitet mir Kopfschmerzen... :(
 

[-UFO-]Melkor

New member
Hast du dir mal die dazugehörige Dokumentation angeschaut?

Du brauchst eine One-to-Many Assoziation. Die Attribute der Tabelle in das User-Object direkt einzubauen ist schlicht nicht möglich (aber auch nicht notwendig).
Vielleicht beschreibst du dein Problem ein wenig genauer …
 

sodiummd

New member
Danke, schon alles gefunden... aber nun mit einem anderen Problem konfrontiert.

Ich habe eine neue Entität erstellt und mit Daten gefüllt. Lasse ich mir nun das neue Objekt ausgeben, ist zu erkennen, dass alles was "gefüllt" sein soll auch gefüllt ist.

Wenn ich nun die Daten in die DB schreiben lassen möchte, erhalte ich die Fehlermeldung, dass 2 Eigenschaften null sind, obwohl diese korrekt gefüllt wurden. Nun habe ich ein wenig rum probiert und raus gefunden, dass es sich dabei um genau die 2 Eigenschaften handelt, welche in einer weiteren Abfrage verwendet werden. Entferne ich diese zusätzliche Abfrage, sind die Daten korrekt vorhanden. Anbei der Code Aussug:

PHP:
   /**
    * @ORM\Id
    * @ORM\Column(type="integer");
    * @ORM\GeneratedValue(strategy="AUTO")
    */   
   protected $value_id;

   /**    
    * @ORM\Column(type="integer", name="entity_id")     
    */       
   protected $entity_id;

   /**    
    *  @ORM\ManyToOne(targetEntity="User\Model\Entity\User", inversedBy="userAttributes")    
    *  @ORM\JoinColumn(name="entity_id", referencedColumnName="user_id")    
    */   
   protected $user;
So erhalte ich die folgende Fehlermeldung:
Code:
[COLOR=#000000][FONT=Consolas]An exception occurred while executing 'INSERT INTO user_attributes (entity_type_id, attribute_id, entity_id, value) VALUES (?, ?, ?, ?)' with params {"1":1,"2":3,"3":null,"4":"Musterstr. 5"}:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'entity_id' cannot be null[/FONT][/COLOR]
Wenn ich nun (theoretisch gesehen) die Verbindung zur User Entität entfernen würde, kann es problemlos in der DB gespeichert werden. Hat jemand ne Ahnung, woran das liegen könnte?!
 

yersinia

New member
Ich glaube, dass du die $entity_id nicht extra in deiner Entity definieren musst. Normal reicht

PHP:
  /**
    * @ORM\Id
    * @ORM\Column(type="integer");
    * @ORM\GeneratedValue(strategy="AUTO")
    */   
   protected $value_id;


   /**    
    *  @ORM\ManyToOne(targetEntity="User\Model\Entity\User", inversedBy="userAttributes")    
    *  @ORM\JoinColumn(name="entity_id", referencedColumnName="user_id")    
    */   
   protected $user;
Dann sollte doctrine das schema und damit auch die JoinColumn entity_id für dich anlegen.
Bin mir jetzt aber nicht ganz sicher, ob dies zu diesem Fehler führt. Vielleicht magst deine beiden Entitys posten und den Testcode im Controller?

Lg
 

sodiummd

New member
Danke, konnte es soweit doch selber lösen.. stehe aber nun vor nem 3. Problem.

Ich erhalte die folgende Fehlermeldung
Code:
[COLOR=#000000][FONT=Consolas]The class 'Doctrine\ORM\PersistentCollection' was not found in the chain configured namespaces Core\Model\Entity, Accounts\Model\Entity, Application\Model\Entity, User\Model\Entity[/FONT][/COLOR]

Nur finde ich im Netz nichts zu dieser Meldung... jemand ne Idee
 

[-UFO-]Melkor

New member
Wenn du eine Lösung hast, teil sie doch mit uns, dann können andere sie weiterverwenden ;-)

Die Fehlermeldung klingt erst einmal nach einem Autoloader-Problem … allerdings bräuchten wir wohl ein paar mehr Informationen
 

yersinia

New member
Hi,

zur Fehlermeldung kann ich nicht viel sagen, aber wie sieht denn eines deiner Entities aus? (ganze Klasse mit use Statements).

Lg
 
Oben