Codeigniter 2 und Doctrine 2 HowTo 4/5
Ziele
- Codeigniter 2 mit Doctrine 2 installieren
- Klasse erstellen und Datenbank anlegen
- Instanz einer Klasse erzeugen
- Containment Beziehung nutzen
- Containment Beziehung auslesen
4. Containment Beziehung nutzen
Die workpackage_id in der Tabelle Task ist aktuell noch Null.
In der Datenbank ist das Feld auch auf Null = true gesetzt.
Ziel: in der Datenbank muss „workpackage_id“ = „not null“ gelten.
Änderung in der Datei application/models/task.php
— nullable=false
* @ManyToOne(targetEntity="Workpackage", inversedBy="task_collection")
* @JoinColumn(name="workpackage_id", referencedColumnName="id", nullable=false)
*/
private $workpackage;
Update des Schemas über die Konsole
Erneutes ausführen des „add Task“ Buttons ruft jetzt einen Fehler hervor
Das passt!
Jetzt muss als erstes ein Workpackage angelegt werden und dann ein Task mit entsprechender Workpackage Id
Dazu muss im Model des Task folgendes ergänzt werden
public function setWorkpackage($workpackage){
$this->workpackage = $workpackage;
return $this;
}
public function getWorkpackage(){
return $this->workpackage;
}
Der Controller wird ebenfalls angepasst (Funktion „add_task“ wird erweitert)
/* doctrine entity manager */
$em = $this->doctrine->em;
// Workpackage anlegen
$workpackage = new \models\Workpackage();
$workpackage->setTitle("package");
$em->persist($workpackage);
// Task anlegen
$task = new \models\Task();
$task->setTitle("first");
// Task mit Workpackage ID verknüpfen
$task->setWorkpackage($workpackage);
$em->persist($task);
//flush ist ähnlich zur save Funktion, es führt save für alle nicht gespeicherten records aus
$em->flush();
$this->load->view('start');
}
Das Ausführen über den Button „add_task“ erstellt jetzt ein Workpackage und einen Task in der Datenbank.
Dem Task wird die Workpackage Id zugewiesen.