База данных
Плагин может настроить свою собственную базу данных, например, содержание plugin/foo/config/database.php
следующее:
return [
'default' => 'mysql',
'connections' => [
'mysql' => [ // mysql - имя подключения
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'название_базы_данных',
'username' => 'имя_пользователя',
'password' => 'пароль',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
'admin' => [ // admin - имя подключения
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'название_базы_данных',
'username' => 'имя_пользователя',
'password' => 'пароль',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
],
];
Способ ссылки Db::connection('plugin.{плагин}.{имя_подключения}');
, например:
use support\Db;
Db::connection('plugin.foo.mysql')->table('user')->first();
Db::connection('plugin.foo.admin')->table('admin')->first();
Если вы хотите использовать базу данных основного проекта, просто используйте ее напрямую, например:
use support\Db;
Db::table('user')->first();
// Предположим, что в основном проекте также настроено подключение admin
Db::connection('admin')->table('admin')->first();
Настройка базы данных для модели
Мы можем создать базовый класс для модели, где с помощью $connection
указывается подключение к базе данных плагина, например:
<?php
namespace plugin\foo\app\model;
use DateTimeInterface;
use support\Model;
class Base extends Model
{
/**
* @var string
*/
protected $connection = 'plugin.foo.mysql';
}
Таким образом, все модели в плагине будут унаследованы от Base и автоматически будут использовать базу данных плагина.
Повторное использование настроек базы данных
Конечно, мы можем повторно использовать настройки базы данных основного проекта. Если вы используете webman-admin, вы также можете повторно использовать настройки базы данных webman-admin, например:
<?php
namespace plugin\foo\app\model;
use DateTimeInterface;
use support\Model;
class Base extends Model
{
/**
* @var string
*/
protected $connection = 'plugin.admin.mysql';
}