Definiertes Delete

Die Abfrage über definierte Statements hat mehrere Vorteile. Zum einen können die einzelnen Felder über Objekte abgebildet werden und zum anderen werden diese Abfragen mittels Prepared Statements an die Datenbank gesendet.

/**
 * Datenquelle/DataSource erstellen
 */
$dsn=new \Alvine\Persistence\Provider\MySQL\DataSource
    ($host, $port, $database, $table, $user, $password, $parameter);
/**
 * Datenobjekt mit der Verbindung zum Datenbankserver
 */
$dataObject=new \Alvine\Persistence\Relation\DataObject
    ($dsn, new \Alvine\Types\Map\SimpleMap());

$definition=new \Alvine\Persistence\Relation\Definition();

$indexField=new \Alvine\Persistence\Relation\Field\Varchar
    ('example-1', 'ISBN');

$definition->append($indexField);

/**
 * Ein Definiertes Statement bietet zum einen eine höhere Sicherheit 
 * und zum anderen eine optimierte Performance.
 */
$statement=new \Alvine\Persistence\Relation\SQL\Delete\DefinedStatement
    ($definition);

/**
 * Where-Abfrage definieren
 */
$statement->where(new \Alvine\Persistence\Relation\SQL\Where
    ($indexField));

/**
 * Datensätze
 */
$records=new \Alvine\Persistence\Relation\Records();
$records->append(new \Alvine\Persistence\Relation\Record(
    ['ISBN'=>'478-1-86681-192-6']));
$query=new \Alvine\Persistence\Relation\Query($statement, $records);

/**
 * Ausführen des Queries
 */
try {
    $result=$dataObject->execute($query);

    /**
     * Es wird folgende SQL-Anweisung auf dem Server ausgeführt:
     * DELETE FROM `example-1` WHERE `example-1`.`ISBN`='478-1-86681-192-6'
     */
} catch(\Exception $e) {
    print_r($e);
    exit-1;
}

if($result->containErrors()) {
    echo "FEHLER\r\n";
    echo (string) $result->getErrors();
    exit(1);
}
/**
 * Das Ergebnis des Queries ist eine Collection.
 */
foreach($result AS $resultSet) {
    /** Gelöschte Datensätze */
    print_r($resultSet->getAffectedRows());
}