【问题标题】:change database connection in laravel model在 laravel 模型中更改数据库连接
【发布时间】:2015-05-13 04:11:55
【问题描述】:

所以我使用 Laravel 4.2,我想要的是在我的一个模型中使用 external 数据库,这是我的模型代码:

<?php
class McibModel extends Eloquent {
    /**
      * The database table used by the model.
      *
      * @var string
      */
    //here i should call the external database table
    protected $table = 'agencies';
}

所以,如果有人有任何想法,我将非常感激。

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

    不同的模型可以有不同的数据库连接。所以您的模型使用正常的默认连接 - 但您的“McibModel”模型可以使用另一个连接:

    class McibModel extends Model {
    
        protected $connection= 'second_db_connection';
    
        protected $table = 'agencies';
    
    }
    

    然后在您的数据库连接文件中 - 您将拥有如下内容:

    return array(
        'connections' => array(
            'mysql' => array(
                'driver'    => 'mysql',
                'host'      => 'localhost',
                'database'  => 'database1',
                'username'  => 'user1',
                'password'  => 'pass1'
                'charset'   => 'utf8',
                'collation' => 'utf8_unicode_ci',
                'prefix'    => '',
            ),
    
            'second_db_connection' => array(
                'driver'    => 'mysql',
                'host'      => 'localhost',
                'database'  => 'database2',
                'username'  => 'user2',
                'password'  => 'pass2'
                'charset'   => 'utf8',
                'collation' => 'utf8_unicode_ci',
                'prefix'    => '',
            ),
        ),
    

    【讨论】:

    • 另请注意on() 方法,它可以让您即时指定连接:McibModel::on('second_db_connection')-&gt;get()
    • 正是我要找的@lukasgeiter
    【解决方案2】:

    以一种方式设置受保护的属性将始终将特定模型连接到数据库。

    class MyModel extends Model {
    
         protected $connection = "second_db_connection";
    }
    

    在查询中我喜欢这种方法...

    (new MyModel())->on('second_db_connnection')->get();
    

    【讨论】:

      【解决方案3】:

      我认为对于很多用例来说,像这样在运行时声明连接会很方便:

      $McibModel = new McibModel();
      $McibModel->setConnection('second_db_connection');
      

      【讨论】:

        【解决方案4】:

        你可以这样做来设置另一个连接:

        $product= new Product();
        $product->setConnection('another_connection');
        

        【讨论】:

          猜你喜欢
          • 2021-05-21
          • 2017-12-26
          • 2018-07-27
          • 2018-12-18
          • 2014-11-11
          • 2013-09-29
          • 2021-09-11
          • 2018-06-18
          • 2020-02-23
          相关资源
          最近更新 更多