Php Laravel 4-连接到其他数据库
有时我想连接到另一个数据库 我用数据库连接数据创建了一个config.php 但是我怎样才能告诉laravel连接到这个数据库而不是使用config/database.php呢 例如,当使用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/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');