在Laravel中的多个数据库中使用事件和监听器

问题描述 投票:0回答:1

我有一些表的主数据库和每个客户端我们有不同的数据库。使用事件和监听器我在哪里指定要使用的连接字符串。对于模型和控制器我使用Config:设置为一个请求动态更改我的连接字符串。我在侦听器句柄方法中添加了相同的内容,但是这不起作用,并且事件显示为失败。

提前致谢。 Listener方法。

public function handle(ApplicationAssociated $event)
{   
    echo "Hi";
    $client_id=$event->client_id;
    echo 'hiii'.$client_id;
    $dbconnections=DBConnection::where('client_id',$client_id)->get();
    if($client_id>0)
    {

        foreach($dbconnections as $dbconnection)
        {
            echo "in if the db name is".$dbconnection->mysql_database;
            echo "break";
            if($dbconnection->mysql_password==NULL)
             {
                 $password="";
             }
             else
             {
                 $password=$dbconnection->password;
             }
             \Config::set([
                 'database.connections.mysql1.host' => $dbconnection->mysql_host,
                 'database.connections.mysql1.database' => $dbconnection->mysql_database,
                 'database.connections.mysql1.username' => $dbconnection->mysql_username,
                 'database.connections.mysql1.password' => $password,
            ]);    
        }

    }

    echo \Config::get('database.connections.mysql1.database');

    Application::where('id',21)
    ->update(['name' =>'Testing eventing']);
    echo "LAST";

}
database laravel event-listener
1个回答
0
投票

试试这个。

配置/ database.php中

    'mysql2' => [
        'driver'         => 'mysql',
        'host'           => env('DB_HOST', '127.0.0.1'),
        'port'           => env('DB_PORT', '3306'),
        'database'       => env('DB_DATABASE2', 'forge'),
        'username'       => env('DB_USERNAME2', 'forge'),
        'password'       => env('DB_PASSWORD2', ''),
        'unix_socket'    => env('DB_SOCKET', ''),
        'charset'        => 'utf8mb4',
        'collation'      => 'utf8mb4_unicode_ci',
        'prefix'         => '',
        'prefix_indexes' => true,
        'strict'         => true,
        'engine'         => null,
        'options'        => extension_loaded('pdo_mysql') ? array_filter([
            PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
        ]) : [],
    ],

.env文件

DB_DATABASE2=ichuztowork
DB_USERNAME2=root
DB_PASSWORD2=

您可以在应用程序的任何位置以这种方式设置连接字符串

$user = (new \App\User(['name'=>'My Name', 'email'=>'[email protected]']))- 
>setConnection('foreignDB');
$user->save();

// or if you don't need to use the model, then just
(new \App\User(['name'=>'My Name', 'email'=>'[email protected]']))- 
>setConnection('foreignDB')->save();
© www.soinside.com 2019 - 2024. All rights reserved.