Codeigniter 2 und Doctrine 2 HowTo 4/5

June 19th, 2011

Ziele

  1. Codeigniter 2 mit Doctrine 2 installieren
  2. Klasse erstellen und Datenbank anlegen
  3. Instanz einer Klasse erzeugen
  4. Containment Beziehung nutzen
  5. 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

X:\xampp\php\php.exe -f "X:\xampp\htdocs\showdoctrine\application\doctrine_init.php" orm:schema-tool:update --force

Erneutes ausführen des “add Task” Buttons ruft jetzt einen Fehler hervor

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'workpackage_id' cannot be null' ......

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

/* Workpackage */
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)

public function add_task(){

/* 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.

PHP, usefull stuff | Comments | Trackback Jump to the top of this page

Leave a Reply

  •  
  •  
  •  

You can keep track of new comments to this post with the comments feed.