Wenn man mit einer Datenbank - Tabelle arbeitet die mit autoincrement arbeitet, möchte man oft wissen welche ID zu letzt eingefügt wurde.
Sofern man das TableGateway vom Zendframework2 benutzt genügt der Befehl $this->tableGateway->lastInsertValue; direkt nach dem ausführen des Datenbankbefehls.
Die Methode saveAlbum wie folgt abgeändert liefert dann immer die ID zurück:
public function saveAlbum(Album $album)
{
$data = array(
'artist' => $album->artist,
'title' => $album->title,
);
$id = (int)$album->id;
if ($id == 0) {
$this->tableGateway->insert($data);
$insertid = $this->tableGateway->lastInsertValue; //Autoincrement - wert abrufen
return $insertid; //und zurückliefern
} else {
if ($this->getAlbum($id)) {
$this->tableGateway->update($data, array('id' => $id));
} else {
throw new \Exception('Form id does not exist');
}
}
}
Vermutlich würde es return $this->tableGateway->lastInsertValue; auch tun.
Notizen rund um das Thema Programmierung mit dem Schwerpunkt PHP und Zend Framework 2 (ZF2)
Posts mit dem Label Tablegateway werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Tablegateway werden angezeigt. Alle Posts anzeigen
Dienstag, 21. Januar 2014
Montag, 6. Januar 2014
ZF2 zweite Datebanktabelle Ansprechen, Tablegateway Tabelle wechseln
Im Zendframework 2 kann man pro Tabellenobjekt nur eine Tabelle ansprechen.
Daher muss man entweder ein neues Gatewayobjekt oder ein SQLobjekt erzeugen. Im folgenden Beispiel habe ich ein SQL -Objekt verwendet:
Zuerst lädt man die entsprechenden Klassen:
In der Methode geht man dann wie folgt vor:
// Adapter Einstellungen holen -> die sind in der Sekelleton Application unter: Config / Autoload / local.php bzw. global.php zu finden:
use Zend\Db\ResultSet\ResultSet; tun:
//Neues result-Objekt erzeugen und initialisieren
Daher muss man entweder ein neues Gatewayobjekt oder ein SQLobjekt erzeugen. Im folgenden Beispiel habe ich ein SQL -Objekt verwendet:
Zuerst lädt man die entsprechenden Klassen:
use Zend\Db\TableGateway\TableGateway;
use Zend\Db\Sql\Sql;
use Zend\Db\Sql\Where;
In der Methode geht man dann wie folgt vor:
// Adapter Einstellungen holen -> die sind in der Sekelleton Application unter: Config / Autoload / local.php bzw. global.php zu finden:
$mysql_adapter=$this->tableGateway->getAdapter();// Falls man die Einstellungen sehen möchte:
//echo var_dump ($mysql_adapter);// Erzeugen eines neuen SQL Objektes, falls man möchte kann man hier schon die Tabelle übergeben (Achtung: Join abfragen funktionieren dann nicht):
$sql = new Sql($mysql_adapter);// Dann die Select Anweisung erstellen:
$select = $sql->select();// Auswählen der Tabelle
$select->from('tabelle');// Auswählern der WHERE Anweisung
$select->where('spalte='.$wert);// SQL-Anweisung anzeigen lassen:
echo $select->getSqlString();// SQL Anweisung ausführbar machen:
$selectString = $sql->getSqlStringForSqlObject($select);// Und ausführen:
$result = $mysql_adapter->query($selectString, $mysql_adapter::QUERY_MODE_EXECUTE);// Falls man das Ergebnis direkt auswerten möchte, kann man das mit use Zend\Db\Adapter\Driver\ResultInterface; und
use Zend\Db\ResultSet\ResultSet; tun:
//Neues result-Objekt erzeugen und initialisieren
$resultSet = new ResultSet;//Jede Zeile auswerten:
$resultSet->initialize($result);
foreach ($resultSet as $row) {
echo $row->spalte . PHP_EOL
}
Abonnieren
Posts (Atom)