如何使用单个 Laravel 代码实例配置和运行具有各自数据库的多个网站

Posted

技术标签:

【中文标题】如何使用单个 Laravel 代码实例配置和运行具有各自数据库的多个网站【英文标题】:How to configure & run multiple websites with respective databases with single Laravel code instance 【发布时间】:2017-01-10 04:27:12 【问题描述】:

我有一个想在 Laravel 中实现的场景。

我已经在自定义 php 中实现了这种方法。但是这一次,我想把所有的网站都转移到一个框架(Laravel)上。

我为不同区域实现了多个域(Localization),每个域都有自己的数据库,所有数据库表结构都相同,只是数据不同。

现在我想使用单个 Laravel 代码实例来连接具有多个域的多个数据库,并且每个域都有自己的主题文件。

假设:我有一些域

 1. abc.com and it has database with name of db_abc with theme/template ABC
 2. xyz.com and it has database with name of db_xyz with theme/template XYZ

abc.com域被点击/访问时,我想连接DBdb_abc并在ABCtheme/template中加载数据。同样,当xyz.com 被点击/访问时,应使用db_xyz 建立数据库连接,并且应将数据加载到theme/template XYZ 文件中。

请在这方面帮助我。

谢谢。

【问题讨论】:

类似问题:***.com/q/34309584/2815635 【参考方案1】:

首先,您需要将所有域指向一个项目。

之后您可以catch 带有路由组的域:

Route::group(['domain' => 'abc.com'], function() 
    Route::get('/', 'SomeController@someAction');
);

要使用多个数据库,您可以使用connection()

$users = DB::connection('foo')->select(...);

如果这些是具有相似结构的相似网站,我建议将数据保存在单个数据库中(甚至可能保存在同一个表中)。

如果您想对所有站点使用相同的路由,您可以将数据库和视图配置保留在配置文件中,并在中间件中检查当前域:

if (strpos(request()->server('HTTP_HOST'), 'abc.com')) 
    session(['site' => 'abc']);

并从配置中获取数据:

$currentDb = config('sites.db')[session('site')];
$currentViewsDir = config('sites.views')[session('site')];

【讨论】:

以上是关于如何使用单个 Laravel 代码实例配置和运行具有各自数据库的多个网站的主要内容,如果未能解决你的问题,请参考以下文章

如何运行比如人写的laravel项目

如何在不同端口后面的单个 Tomcat 实例上运行不同的应用程序?

如何在单个 Mobile First v7.1 服务器实例中创建两个运行时

如何在同一个域上运行多个 Laravel 实例?

如何使用 Guzzle 和 Laravel 从 JSON 响应中提取单个数组值

通过 Laravel 集合创建单个数组,但具有特定字段