Laravel 5.5,2个不同的数据库和不同的模型

时间:2018-03-16 15:18:38

标签: php database laravel eloquent laravel-5.5

我有2个不同的数据库,我可以在 config \ database.php 模型<中设置2个不同的数据库,其中包含2个不同的'conection' => ['database01' => [ ...'conection' => ['database02' => [ ... / strong> with protected $connection = '1database';protected $connection = '2database';

但我想使用一个控制器并插入类似的条件

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;

if (\Session::get('db')=='database01'){
    use App\Model01;
}else{
    use App\Model02;
}

此解决方案不起作用,但应该是完美的解决方案。 我可以做类似的事情,但现在是很多时间。

public function index()
    {
    if ($baseDat1){
         $data= Data01::orderBy('id', 'desc')->take(25)->get();
    }else{
        $data= Data02::orderBy('id', 'desc')->take(25)->get();
    }        
}

如果可以做我想要的事情?

4 个答案:

答案 0 :(得分:1)

导入它们。然后在if语句中启动正确的一个。像这样:

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Model01;
use App\Model02;
// ...

// Your controller
if (\Session::get('db')=='database01'){
    $model = app()->make(Model01::class);
} else {
    $model = app()->make(Model02::class);
}
// And now you can make queries with your $model like this
$results = $model->where(condition)->get();

答案 1 :(得分:1)

您可以为此目的实施特质。并在您的模型中使用它。

cid

答案 2 :(得分:0)

您可以在\ App \ Providers \ AppServiceProvider :: boot()方法中设置默认数据库连接。

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    if (true) {
        $this->app['db']->setDefaultConnection('database_01');
    } else {
        $this->app['db']->setDefaultConnection('database_02');
    }
}

答案 3 :(得分:0)

您可以使用辅助函数

更改配置数据库文件

1 - 创建辅助函数changeDatabases($database)

2 - 更改配置数据库

 if(database == 'baseDat1'){
 config(['database.connections.mysql.host' => 'newHost']);
 config(['database.connections.mysql.database' => 'newDatabase']);
 config(['database.connections.mysql.username' => 'newUsername']);
 config(['database.connections.mysql.password' => 'newPassword']);
}

3 - 如果它们不相等,你必须创建两个不同的模型

会话持续时间的变化很好