【问题标题】:Laravel 5 How to change a model database connection within controllerLaravel 5 如何更改控制器内的模型数据库连接
【发布时间】:2018-12-18 06:24:10
【问题描述】:

我的应用应该连接到一个内部和两个外部商业 SQL 数据库。

所以,我有几个模型连接到外部 MS-SQL 数据库。

模型看起来像这样:

class version_Jato extends Model
{
    //
    protected $connection = 'sqlJato';
    protected $table = 'version';
....
}

到目前为止,一切正常,应用可以使用两个数据库。

我想改变控制器中的 $connection 变量让我们说

version_Jato-> $connection = 'sqlJato2'.

这可能吗?

因为我有两个与结构相同的 SQL 数据库,只是它们之间的数据不同,我不想将所有模型和控制器中的代码加倍。

非常感谢您的关注!

【问题讨论】:

  • 如果是protected,这对外部实体意味着什么? (提示:封装)

标签: php sql laravel-5


【解决方案1】:

可以使用on()静态方法切换连接:

YourModel::on('connection_name')->get();

Source

【讨论】:

  • 哈哈,出于某种原因,我总是为 Laravel 开箱即用的功能编写一些漂亮的代码。好电话!
  • 非常感谢,我正在度假,我忘了标记为答案:)
  • @Radu 没问题! :)
【解决方案2】:

我对 Laravel 了解得不够多,无法知道这是否真的可以工作(例如,它实际上会切换数据库),但普通的旧 OOP 告诉我它可以这样编程:

型号

const SQL_JATO = 'sqljato';
const SQL_JATO_TWO = 'sqljato2'

public function setDbConnection(string $connection)
{
    $this->connection = $connection;
}

控制器

$jato = new version_jato([$attributes]); // Put something in here
$jato->setDbConnection(version_jato::SQL_JATO_TWO);
$jato->save();

【讨论】:

  • 谢谢亲爱的先生!
猜你喜欢
  • 2015-05-13
  • 1970-01-01
  • 2021-05-21
  • 2016-01-07
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
相关资源
最近更新 更多