【问题标题】:Laravel multi databases [duplicate]Laravel多数据库[重复]
【发布时间】: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 确保你有一个新的配置文件

标签: php laravel laravel-5 laravel-5.5


【解决方案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 用于传播连接。

    希望这会有所帮助。

    【讨论】:

    • 您好,感谢您的回复,但我仍然不清楚如何解决此问题...您能给我一个示例、视频或存在此解决方案的网站吗?
    猜你喜欢
    • 2017-11-07
    • 2018-03-28
    • 1970-01-01
    • 2013-12-15
    • 2018-12-07
    • 2017-09-05
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多