News in Nette Database 3.1
With an elegant way of working with a transaction comes a new method
transaction()
. You pass in a callback that runs in the transaction.
If any exception is thrown, the transaction is rolled back. If everything goes
well, the transaction will be committed.
Method Connection::transaction()
returns the value returned by
the callback, so you can pass the insert id for example:
$id = $db->transaction(function ($db) {
$db->query('DELETE FROM ...');
$db->query('INSERT INTO ...');
$id = $db->getInsertId();
$this->savePerson(...);
// ...
return $id;
});
The transaction()
can also be nested, which simplifies the
implementation of independent entities. So the mentioned
savePerson()
method can look like this:
public function savePerson($data)
{
$this->db->transaction(function () {
$this->saveAddresses(...);
...
});
}
Clarity
Because the name Database Explorer has
been used for the part of library allowing easy object access to the database,
the base class Nette\Database\Context
changes its name to
Nette\Database\Explorer
. Furthermore, Nette gradually leaves the
prefix I
in the interface names, which also applies to the Database
library.
Of course, the original names still work as aliases.
Other Changes
- The SQL statement translator, which is the heart of the whole library, is a bit more careful and checks the inputs more.
- MySqlDriver driver uses subqueries.
- The minimum required version of PHP is 7.2.
Sign in to submit a comment