2016-07-24 69 views
1

我有一个项目必须通过这两个网址us_myproject.comes_myproject.com访问。Laravel 5 - 如何为同一个laravel项目设置多个数据库凭证(如果可能的话)?

他们共享相同的文件夹和代码。实际上,只有一个laravel项目:htdocs/myproject

根据URL信息必须来自us_dbes_db,基于所使用的URL。

所以我的问题是如何设置.env数据库凭据指向这两个不同的数据库。我有2个不同的数据库,2个不同的用户和2个不同的密码。我怎样才能完成这项任务?

我有这样的跟踪代码的工作原理:

URL: us_myproject.com/dbtest 


.env 
DB_CONNECTION=mysql 
DB_HOST=127.0.0.1 
DB_PORT=3306 
DB_DATABASE=us_db 
DB_USERNAME=root 
DB_PASSWORD='' 

Route::get('dbtest',function(){//Works good 
$tblusertypes=DB::table("tblusertypes")->get(); 
return $tblusertypes; 
}); 

如果我做URL: es_myproject.com/dbtest应查询对es_db但我不知道如何设置。任何想法?

回答

0

上的其他答案读你的意见,我已经提出了以下解决方案:

  1. 打开配置/ database.php中:
 

    <?php 

    return [ 
     ... 

     'connections' => [ 

      ... 

      'mysql' => [ 
       'driver' => 'mysql', 
       'host'  => env('DB_HOST', 'localhost'), 
       'database' => env('DB_DATABASE', 'forge'), 
       'username' => env('DB_USERNAME', 'forge'), 
       'password' => env('DB_PASSWORD', ''), 
       'charset' => 'utf8', 
       'collation' => 'utf8_unicode_ci', 
       'prefix' => '', 
       'strict' => false, 
      ], 

      ... 

     ], 

     ... 

    ]; 
  • 编辑文件是这样的:
  •  
    
        <?php 
    
        $config = [ 
         ... 
    
         'connections' => [ 
    
          ... 
    
          'mysql' => [ 
           'driver' => 'mysql', 
           'host'  => env('DB_HOST', 'localhost'), 
           'database' => env('DB_DATABASE', 'forge'), 
           'username' => env('DB_USERNAME', 'forge'), 
           'password' => env('DB_PASSWORD', ''), 
           'charset' => 'utf8', 
           'collation' => 'utf8_unicode_ci', 
           'prefix' => '', 
           'strict' => false, 
          ], 
    
          ... 
    
         ], 
    
         ... 
    
        ]; 
    
        if(Request::server('HTTP_HOST') == 'es_myproject.com') 
        { 
         $config['connections']['mysql'] = [ 
          'driver' => 'mysql', 
          'host' => 'esHOST', 
          'database' => 'esDB', 
          'username' => 'esUSER', 
          'password' => 'esPASSWORD', 
          'charset' => 'utf8', 
          'collation' => 'utf8_unicode_ci', 
          'prefix' => '', 
          'strict' => false, 
         ]; 
        } 
    
        return $config; 
    
    

    在这里,我假定.env文件包含us_myproject.com的数据库凭据。

    +0

    嗨,我看到你做了什么。因此,您的想法是根据HTTP_HOST更改阵列内容 - 凭证。这是一个很好的选择。但它提出了一个问题。这个改变将在SESSION结束之前可用,我的意思是让用户可以访问主页,Session将被设置为一个特定的环境,在这种情况下,西班牙(es),然后他会去到另一页,并尝试插入一些sturff。环境已经坐了? – zwitterion

    +2

    我认为这与SESSION没有任何关系。这只是您用于特定主机的数据库的问题。当他们随时切换到另一台主机时,凭证将被切换。 – Naveed

    1

    是的,你可以在Laravel设置超过1个数据库,开放config/databaseconnection阵列设置像一回事一个新的数据库中mysql阵列

    .env文件,你可以检测一下数据库是default

    要调用它:$result = DB::connection('my_new_database')->table('my_table')->get();

    +0

    NIce,以及如何在URL和数据库之间建立连接?我的意思是,如果URL是'es_myproject.com',我怎样才能将DB :: connection('es_myproject')'或'us_myproject.com'设置为'DB :: connection('us_myproject')'? – zwitterion

    +0

    我不明白你的问题 –

    +0

    问题是我应该在哪里创建url和数据库之间的关系。我的意思是如果用户键入'es_myproject.com'数据库默认应该是'es_db'。如果用户键入'us_myproject.com',则默认情况下数据库应该是'us_db'。那么,应该有一个条件,如果某些地方,对吗? – zwitterion

    相关问题