Posts mit dem Label Tablegateway werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Tablegateway werden angezeigt. Alle Posts anzeigen

Dienstag, 21. Januar 2014

Welche ID wurde beim TableGateway automatisch eingefügt?

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.

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:
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;
$resultSet->initialize($result);
//Jede Zeile auswerten:
            foreach ($resultSet as $row) {
                echo $row->spalte . PHP_EOL
            }