symbiotic / database
支持通过命名空间定义数据库连接的数据库连接配置器。
1.4.2
2023-04-12 16:12 UTC
Requires
- php: >=8.0
Suggests
- symbiotic/eloquent: Encapsulated version of Laravel ORM with namespace connection support
This package is auto-updated.
Last update: 2024-09-12 19:31:03 UTC
README
README.RU.md 俄语描述
支持根据命名空间选择连接的数据库连接配置包。
安装
composer require symbiotic/database
描述
该包包含两个主要接口和一个管理器
ConnectionsConfigInterface
- 负责存储连接NamespaceConnectionsConfigInterface
- 负责存储命名空间连接DatabaseManager
- 管理器,包含所有两个接口,\ArrayAccess , \Stringable
使用方法
初始化连接
$config = [ 'default' => 'my_connect_name', // Namespace connections 'namespaces' => [ '\\Modules\\Articles' => 'mysql_dev', ] 'connections' => [ 'my_connect_name' => [ 'driver' => 'mysql', 'database' => 'database', 'username' => 'root', 'password' => 'toor', 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', ], 'mysql_dev' => [ // .... ], ] ]; // Building from an array $manager = \Symbiotic\Database\DatabaseManager::fromArray($config); // Building via constructor $manager = new \Symbiotic\Database\DatabaseManager( new \Symbiotic\Database\ConnectionsConfig($config['connections'], $config['default']), new \Symbiotic\Database\NamespaceConnectionsConfig($config['namespaces']) // необязательно );
方法 ConnectionsConfigInterface
和 \ArrayAccess
/** * @var \Symbiotic\Database\DatabaseManager $manager */ // Getting all connections $connections = $manager->getConnections(); // Default Connection $defaultConnection = $manager->getDefaultConnectionName(); // Checking if a connection config exists $bool = $manager->hasConnection('my_connect_name'); $bool = isset($manager['my_connect_name']); // Getting connection data $connectionData = $manager->getConnection('my_connect_name'); $connectionData = $manager['my_connect_name']; // Retrieving connection data by namespace, if search engine by namespaces is enabled (description below) $connectionData = $manager->getConnection(\Modules\PagesApplication\Models\Event::class); // Adding a connection $manager->addConnection( [ 'driver' => 'mysql', 'database' => 'test_db', 'username' => 'root', 'password' => 'toor', //.... ], 'test_connection' ); $manager['my_connect_name'] = [ //.... ]; // Deleting a connection by name $manager->removeConnection('test_connection'); unset($manager['test_connection']);
方法 NamespaceConnectionsConfigInterface
/** * @var \Symbiotic\Database\DatabaseManager $manager */ // Is the connection search by namespace active? $bool = $manager->isActiveNamespaceFinder(); // Enable/disable search $manager->activateNamespaceFinder(false); // Adding a connection for a module $manager->addNamespaceConnection('\\Modules\\PagesApplication', 'test_connection'); // Getting the name of the connection by class, if disabled, it will return null $pagesConnectionName = $manager->getNamespaceConnection(\Modules\PagesApplication\Models\Event::class); // return `test_connection` // Automatic connection search in the call stack, if disabled, returns null $connectionData = $manager->findNamespaceConnectionName();
行为特性
此外,还有一个智能的 __toString() 方法。如果启用了命名空间搜索 isActiveNamespaceFinder()
,则通过 findNamespaceConnectionName()
方法根据命名空间查找连接,或者从 getDefaultConnectionName()
方法返回默认连接
请注意禁用通过命名空间定义连接时的行为!
示例
// Configuration part 'default' => 'my_connect_name', // Packet Connections 'namespaces' => [ '\\Modules\\Articles' => 'mysql_dev', ] /** * @var \Symbiotic\Database\DatabaseManager $manager */ // Installed Namespace from config namespace Modules\Articles\Models { $objectConnectionName = (string)$manager; // mysql_dev (namespace connection) $objectConnectionData = $manager->getConnection(__NAMESPACE__); // mysql_dev config (namespace connection) $objectConnectionName = $manager->getNamespaceConnection(__NAMESPACE__); // mysql_dev (namespace connection) $connectionData = $manager->findNamespaceConnectionName(); // mysql_dev (namespace connection) // turn off detection by namespaces $manager->activateNamespaceFinder(false); $objectConnectionName = (string)$manager; // my_connect_name (default) $objectConnectionData = $manager->getConnection(__NAMESPACE__); // NULL $objectConnectionName = $manager->findNamespaceConnectionName();// NULL $objectConnectionName = $manager->getNamespaceConnection(__NAMESPACE__); // NULL // Namespace connection can be requested directly from the config $objectConnectionName = $manager->getNamespacesConfig()->getNamespaceConnection(__NAMESPACE__); // mysql_dev (namespace connection) } // Любой другой неймспейс namespace Modules\NewSpace\Models { $objectConnectionName = (string)$manager; // my_connect_name (default) $objectConnectionData = $manager->getConnection(__NAMESPACE__); // NULL $objectConnectionName = $manager->findNamespaceConnectionName();// NULL $objectConnectionName = $manager->getNamespaceConnection(__NAMESPACE__); // NULL }
对于 Symbiotic 应用程序
Symbiotic 框架应用程序有一个提供者,可以自动从应用程序设置中根据包的基础命名空间建立连接。
- 要添加数据库选择字段,在包设置字段中创建名为
database_connection_name
的字段
// symbiotic.json { "settings_fields": [ { "label": "App Database", "name": "database_connection_name", "type": "settings::database" } /// Other settings fields... ] }
- 在
"app"
应用程序部分添加提供者 \Symbiotic\Database\AppNamespaceConnectionProvider
// symbiotic.json { "app": { "id": "my_app", //.... "providers": [ "\\Symbiotic\\Database\\AppNamespaceConnectionProvider" // Added provider ] /// More app settings... } }