如何使用单个 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
并在ABC
theme/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 代码实例配置和运行具有各自数据库的多个网站的主要内容,如果未能解决你的问题,请参考以下文章
如何在不同端口后面的单个 Tomcat 实例上运行不同的应用程序?
如何在单个 Mobile First v7.1 服务器实例中创建两个运行时