Php Laravel 4-连接到其他数据库

Php Laravel 4-连接到其他数据库,php,laravel,laravel-4,Php,Laravel,Laravel 4,有时我想连接到另一个数据库 我用数据库连接数据创建了一个config.php 但是我怎样才能告诉laravel连接到这个数据库而不是使用config/database.php呢 例如,当使用模式类时 因为似乎没有人明白我想要什么 我不想使用config/database.php,我想在不同的位置使用不同的配置文件。听起来你已经解决了这个问题。下面是我如何做到的,不管是对其他人来说,还是对你有用的东西 首先,在app/config/database.php中添加第二个连接。注意:该文件路径可能会根

有时我想连接到另一个数据库

我用数据库连接数据创建了一个config.php

但是我怎样才能告诉laravel连接到这个数据库而不是使用config/database.php呢

例如,当使用
模式
类时

因为似乎没有人明白我想要什么


我不想使用config/database.php,我想在不同的位置使用不同的配置文件。

听起来你已经解决了这个问题。下面是我如何做到的,不管是对其他人来说,还是对你有用的东西

首先,在
app/config/database.php
中添加第二个连接。注意:该文件路径可能会根据您的环境而更改

<?php
return array(
    'connections' => array(
        'mysql' => array(
            'driver'    => 'mysql',
            'host'      => 'localhost',
            'database'  => 'database1',
            'username'  => 'user1',
            'password'  => 'pass1'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),

        'mysql2' => array(
            'driver'    => 'mysql',
            'host'      => 'localhost',
            'database'  => 'database2',
            'username'  => 'user2',
            'password'  => 'pass2'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),
    ),
);

请记住,Laravel 4实际上是一组组件,您可以单独使用这些组件

这里有一个示例展示了如何与Capsule类交互:

use Illuminate\Database\Capsule\Manager as Capsule;

$capsule = new Capsule;

$capsule->addConnection([
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'database',
    'username'  => 'root',
    'password'  => 'password',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
]);

// Set the event dispatcher used by Eloquent models... (optional)
use Illuminate\Events\Dispatcher;
use Illuminate\Container\Container;
$capsule->setEventDispatcher(new Dispatcher(new Container));

// Set the cache manager instance used by connections... (optional)
$capsule->setCacheManager(...);

// Make this Capsule instance available globally via static methods... (optional)
$capsule->setAsGlobal();

// Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher())
$capsule->bootEloquent();
这是一系列您需要运行的引导,所以将其放在函数或方法中的某个地方


但是,这是绝对可能的。

有一个更简单的解决方案。如果您使用的是Larave 4,那么有一个选项对我有效。最近,他们添加了$table变量,您可以在模型中指定该变量。参考

如果您使用的是MySQL,则可以执行以下操作:

class User extends Eloquent {

    protected $table = 'mydbname.my_users';

}
如果您使用的是SQL Server,则可以执行以下操作:

class User extends Eloquent {

    protected $table = 'mydatabase..my_users';

}
我的配置文件指定了DB1,但我创建了一个模型,希望在同一个MySQL主机中访问DB2。因此,这是一个快速而肮脏的方式来完成这一点

现在我并没有一直充分利用雄辩的ORM,所以这种“黑客”可能无法与多对多或一对多雄辩的方法一起工作

我还有一个想法,但实际上我没有尝试,那就是在DB1中创建一个存储过程(例程),在该例程中,我可以通过查询以下链接来访问DB2表:

SELECT * from db2.mytable where id = 1;

编辑
bootstrap/start.php
文件并添加您的机器名(打开终端:
hostname

将您的计算机添加到$env

$env = $app->detectEnvironment(array(
    'mymachine' => array('mymachine.local'),
));
  • 'app/config/mymachine'
  • 添加带有新配置参数的
    database.php
    副本

  • 要在其他位置使用配置文件,请说
    src/config

    use Config;
    
    
    $this->dbConfig = Config::get('appname::dbInfo.connections.test');
    $this->database = $this->dbConfig['database'];
    $this->username= $this->dbConfig['username'];
    $this->password= $this->dbConfig['password'];
    
    其中,
    dbInfo
    是应用程序的
    src/config
    目录中的一个简单php文件,返回一个包含元素
    connections
    的数组,该元素是一个数据库属性数组

    您可以使用以下命令告诉Laravel使用外部配置文件:

    Config::set("database.connections.test", $this->dbConfig);
    DB::connection("test");
    

    我相信您希望实现某种逻辑切分,在这种切分中动态创建数据库

    在这种情况下,您可以在laravel中动态添加数据库配置,如下所示

    $conn = array(
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'DATABASE',
        'username'  => 'USERNAME',
        'password'  => 'SOME_PASSWORD',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    );
    
    Config::set('database.connections.DB_CONFIG_NAME', $conn);
    
    现在通过雄辩的方式连接

    MODEL::on('DB_CONFIG_NAME')->WHAT_EVER('1');
    
    在查询生成器的情况下,您可以执行以下操作

    $DB = DB::connection('DB_CONFIG_NAME');
    
    现在使用
    $DB->select()
    进行查询


    希望这将有助于开发人员为这个问题寻找可能的解决方案

    因为您没有为“端口”提供任何特定的代码,请查看以防它回答您的问题。什么代码?正如我所说的,我想用数据库设置创建一个附加的config.php,并连接到它。问题是我如何告诉laravel使用此配置而不是config/database.php。链接页面显示了如何将多个数据库配置添加到database.php,以及如何选择连接到/query的数据库配置。我感谢您尝试帮助我,但我现在写了两次。我不想使用config/database.php。我想在不同的位置创建一个附加的config.php文件。然后您只需使用
    Schema::connection('foo')->create('users',function($table).
    来使用'foo'数据库。我使用一个moduleSystem。这就是原因;)验证呢?例如,“存在”验证规则。您如何告诉它使用其他连接/数据库?您可以跳过它在中设置的连接。我不知道是否需要在数据库连接之间切换。您必须深入研究代码并进行一些扩展/覆盖。如果您对拥有/能够让同一用户访问两个数据库感到满意,这是一个非常优雅的解决方案。这似乎不适用于Laravel 5.2,DatabaseManager.php:239抛出异常“Database[Database.connections.DB\u CONFIG\u NAME]“未配置。”我还尝试了
    App::make('config')->set('database.connections.DB\u config\u NAME',$conn)
    ,结果相同。知道吗?对不起,我弄错了。我忽略了一个简单的事实,即您不需要
    database.connections.
    前缀,稍后在引用配置的连接时。由于某种原因,那个错误消息完全把我吓坏了。
    $DB = DB::connection('DB_CONFIG_NAME');