laminas/laminas-db
Laminas\Db is a flexible database abstraction for PHP, providing adapters for major databases, SQL builders, table gateways, result sets, metadata tools, and a profiler to help build portable, testable data access layers.
The trait Laminas\Db\Adapter\AdapterAwareTrait, which provides implementation
for Laminas\Db\Adapter\AdapterAwareInterface, and allowed removal of
duplicated implementations in several components of Laminas or in custom
applications.
The interface defines only the method setDbAdapter() with one parameter for an
instance of Laminas\Db\Adapter\Adapter:
public function setDbAdapter(\Laminas\Db\Adapter\Adapter $adapter) : self;
use Laminas\Db\Adapter\AdapterAwareTrait;
use Laminas\Db\Adapter\AdapterAwareInterface;
class Example implements AdapterAwareInterface
{
use AdapterAwareTrait;
}
Create a database adapter and set the adapter to the instance of the Example
class:
$adapter = new Laminas\Db\Adapter\Adapter([
'driver' => 'Pdo_Sqlite',
'database' => 'path/to/sqlite.db',
]);
$example = new Example();
$example->setAdapter($adapter);
The delegator
Laminas\Db\Adapter\AdapterServiceDelegator can be used to set a database
adapter via the service manager of laminas-servicemanager.
The delegator tries to fetch a database adapter via the name
Laminas\Db\Adapter\AdapterInterface from the service container and sets the
adapter to the requested service. The adapter itself must be an instance of
Laminas\Db\Adapter\Adapter.
Integration for Mezzio and laminas-mvc based Applications
In a Mezzio or laminas-mvc based application the database adapter is already registered during the installation with the laminas-component-installer.
Create a class and add the trait AdapterAwareTrait.
use Laminas\Db\Adapter\Adapter;
use Laminas\Db\Adapter\AdapterInterface;
class Example implements AdapterAwareInterface
{
use AdapterAwareTrait;
public function getAdapter() : ?Adapter
{
return $this->adapter;
}
}
(A getter method is also added for demonstration.)
Create and configured the service manager:
use Interop\Container\ContainerInterface;
use Laminas\Db\Adapter\AdapterInterface;
use Laminas\Db\Adapter\AdapterServiceDelegator;
use Laminas\Db\Adapter\AdapterAwareTrait;
use Laminas\Db\Adapter\AdapterAwareInterface;
$serviceManager = new Laminas\ServiceManager\ServiceManager([
'factories' => [
// Database adapter
AdapterInterface::class => static function(ContainerInterface $container) {
return new Laminas\Db\Adapter\Adapter([
'driver' => 'Pdo_Sqlite',
'database' => 'path/to/sqlite.db',
]);
}
],
'invokables' => [
// Example class
Example::class => Example::class,
],
'delegators' => [
// Delegator for Example class to set the adapter
Example::class => [
AdapterServiceDelegator::class,
],
],
]);
Retrieving an instance
of the Example class with a database adapter:
/** [@var](https://github.com/var) Example $example */
$example = $serviceManager->get(Example::class);
var_dump($example->getAdapter() instanceof Laminas\Db\Adapter\Adapter); // true
The validators Db\RecordExists and Db\NoRecordExists
implements the trait and the plugin manager of laminas-validator
includes the delegator to set the database adapter for both validators.
How can I help you explore Laravel packages today?