欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

在 Laravel Eloquent 中使用多个数据库连接 有大用

【Laravel学习笔记】使用多数据库配置

之前一篇笔记写了拆分route.php文件,今天遇到一个情况,就是使用多个数据库来存放数据。
A业务需要存在A库,B业务需要存放在B库,而管理后台又需要单独存放一个数据库,于是就要用到Laravel的database配置。

一、数据库配置
config/database.php中的connections里有一段代码是配置默认数据库的:

 

那么我们要把这段代码复制一份出来,其中host等参数都可以重新定义,我这里的需求只需要改动databse(库名)就可以了,所以我的代码是这样的:

 

配置名mysql改为mysql_games,databse读取env配置中的DB_DATABASE_GAMES的值,接下来在.env文件中增加一条DB_DATABASE_GAMES=库名就可以了。

二、DB和Model配置

光是改了配置,但是在Model中怎么指定去读写哪个数据库呢?
在Model文件中加入下段代码即可指定该Model读写的是哪个数据库。

 

在使用DB的情况下,则使用下段示例代码来进行操作:

 

三、数据库迁移和数据填充

我们在正常开发中,会经常用laravel的迁移功能来构建线下和线上的数据表结构,那么在使用多个数据库的时候我们怎么来指定该迁移是对应哪个数据库的呢?

在写构建数据表代码的时候,像下段代码一样写即可:

 

 

四、规则验证

在Laravel中为我们提供了一个验证服务,可以用来对表单数据等进行规则校验,其中有一个unique验证方法,可以验证字段在给定数据表上必须是唯一的,这里也需要对数据表所属数据库进行指定,否则默认读mysql配置的默认数据库。

 

 

unique:配置名.表名

好啦,大概就这么几点,自己学习备忘的同时,也希望可以帮助到更多正在学习Laravel框架的人。

来自 https://m.aoh.cc/173.html

我们可能会有多个数据库 (config/database.php)
  'mysql' => array(
            'driver'    => 'mysql',
      'host'      => 'localhost',
      'database'  => 'superadmin',
      'username'  => 'root',
      'password'  => 'knwall',
      'charset'   => 'utf8',
      'collation' => 'utf8_unicode_ci',
      'prefix'    => '',
    ),

    'mysql2' => array(
      'driver'    => 'mysql',
      'host'      => 'localhost',
      'database'  => 'framework',
      'username'  => 'root',
      'password'  => 'knwall',
      'charset'   => 'utf8',
      'collation' => 'utf8_unicode_ci',
      'prefix'    => '',
    ),

接下来我们可以使用 Model 的 $connection 属性来指定当前模型使用指定的连接。

默认连接:

class Organization extends Eloquent{
    // 不指定则使用默认的 "mysql

}

制定连接:

class FrameworkOrganization extends Eloquent{
  protected $connection = 'mysql2'; /// Other connection
}

来自  https://tiicle.com/items/10/the-use-of-multiple-database-connections-in-laravel-eloquent



问题描述

我想在我的系统中组合多个数据库。大多数时候数据库是MySQL;但在将来可能会有所不同,管理员可以生成使用异构数据库系统的源的报告。

那么我的问题是拉里维尔是否提供任何立面处理这种情况?还是任何其他框架都有更多的适合能力的问题呢?

 

最佳解决方案

定义连接

内部的数据库配置文件 – 可能是app/config/database.php

return array(

    'default' => 'mysql',

    'connections' => array(

        # Our primary database connection
        'mysql' => array(
            'driver'    => 'mysql',
            'host'      => 'host1',
            'database'  => 'database1',
            'username'  => 'user1',
            'password'  => 'pass1'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),

        # Our secondary database connection
        'mysql2' => array(
            'driver'    => 'mysql',
            'host'      => 'host2',
            'database'  => 'database2',
            'username'  => 'user2',
            'password'  => 'pass2'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),
    ),
);

架构

在Schema Builder中,您可以使用Schema facade与任何连接。要指定要使用的连接,只需运行connection()方法:

Schema::connection('mysql2')->create('some_table', function($table)
{
    $table->increments('id'):
});

询问

与Schema Builder类似,您可以在查询生成器上定义一个连接:

$users = DB::connection('mysql2')->select(...);

雄辩

您还可以定义在您的雄辩模型中使用的连接!

一种方法是在您的模型中设置$connection变量:

<?php

class SomeModel extends Eloquent {

    protected $connection = 'mysql2';

}

您还可以通过setConnection方法在运行时定义连接

<?php

class SomeController extends BaseController {

    public function someMethod()
    {
        $someModel = new SomeModel;

        $someModel->setConnection('mysql2');

        $something = $someModel->find(1);

        return $something;
    }

}

Note Be careful about attempting to build relationships with tables across databases! It is possible to do, but it can come with some caveats and depends on what database and/or database settings you have.


From Laravel Docs

使用多个数据库连接

使用多个连接时,可以通过DB立面上的连接方法访问每个connection。传递给connection方法的name应对应于config/database.php配置文件中列出的连接之一:

$users = DB::connection('foo')->select(...);

您还可以使用连接实例上的getPdo方法访问原始的基础PDO实例:

$pdo = DB::connection()->getPdo();

有用的链接

  1. Source

  2. Laravel 5多数据库连接从laracasts.com

  3. tutsnare.com连接laravel中的多个数据库

 

次佳解决方案

在Laravel 5.1中,指定连接:

$users = DB::connection('foo')->select(...);

默认情况下,Laravel使用默认连接。很简单,不是吗?

在这里阅读更多:http://laravel.com/docs/5.1/database#accessing-connections

参考文献

 

注:本文内容整合自google/baidu/bing辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:gxnotes#qq.com(#替换为@)。

本文由《共享笔记》整理, 博文地址: https://gxnotes.com/article/131928.html,未经允许,请勿转载。

来自 https://gxnotes.com/article/131928.html
普通分类: