Laravel多数据库[重复]

Posted

技术标签:

【中文标题】Laravel多数据库[重复]【英文标题】:Laravel multi databases [duplicate] 【发布时间】:2018-06-16 23:55:41 【问题描述】:

我正在尝试使用多个数据库来使用 laravel:

Laravel 版本:5.5.28 php 版本 7.2.0 数据库驱动和版本:MariaDB 10.1.29

定义连接:

return array(

    'default' => 'mysql',

    'connections' => array(

        # Primary/Default database connection
        'mysql' => array(
            'driver'    => 'mysql',
            'host'      => 'localhost',
            'database'  => 'bdd1',
            'username'  => 'root',
            'password'  => ''
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),

        # Secondary database connection
        'mysql2' => array(
            'driver'    => 'mysql',
            'host'      => 'localhost',
            'database'  => 'bdd2',
            'username'  => 'root',
            'password'  => ''
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),
    ),
);

定义模型:

class Products extends Model 

    protected $connection = 'mysql';


定义控制器:

class ProductController extends BaseController 

    public function find()
    
        $productModel= new Products;

        $productModel->setConnection('mysql2');

        $product= $productModel->find(1);

        return $product;
    


上面的代码可以正常工作,但是如果我更改控制器中的连接名称,它会继续使用 .env 文件中配置的内容

请问,谁能帮我解决这个问题?

【问题讨论】:

试试:php artisan config:clear 确保你有一个新的配置文件 【参考方案1】:

您可以配置: .env

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=bdd1
DB_USERNAME=root
DB_PASSWORD=

DB_CONNECTION_SECOND=mysql2
DB_HOST_SECOND=localhost
DB_PORT_SECOND=3306
DB_DATABASE_SECOND=bdd2
DB_USERNAME_SECOND=root
DB_PASSWORD_SECOND=

config/database.php

'mysql' => [

    'driver' => env('DB_CONNECTION'),
    'host' => env('DB_HOST'),
    'port' => env('DB_PORT'),
    'database' => env('DB_DATABASE'),
    'username' => env('DB_USERNAME'),
    'password' => env('DB_PASSWORD'),
],

'mysql2' => [
    'driver' => env('DB_CONNECTION_SECOND'),
    'host' => env('DB_HOST_SECOND'),
    'port' => env('DB_PORT_SECOND'),
    'database' => env('DB_DATABASE_SECOND'),
    'username' => env('DB_USERNAME_SECOND'),
    'password' => env('DB_PASSWORD_SECOND'),
],

祝你好运!

【讨论】:

【参考方案2】:

有两种方法可以实现这一点,一旦您动态更改连接,您必须传播连接,您可以这样做。

if ($this->propogateConnection) 
    $instance->setConnection($this->getConnectionName());
 

另一件事是您可以使用Model::on('connection_name',true),而 true 用于传播连接。

希望这会有所帮助。

【讨论】:

您好,感谢您的回复,但我仍然不清楚如何解决此问题...您能给我一个示例、视频或存在此解决方案的网站吗?

以上是关于Laravel多数据库[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中按日期删除重复的数据库记录

laravel 使用具有多对多关系数据透视表的策略

Laravel 多对多关系检查与中间表

在 Laravel 4 中使用在 2 个数据库之间创建多对多关系

Laravel - 是不是可以与一个表和一个数据透视表建立多对多关系

Laravel 多关系数据获取