我正在尝试使用多个数据库使用laravel:
定义连接:
return array(
'default' => 'mysql',
'connections' => array(
# Primary/Default database connection
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'bdd1',
'username' => 'root',
'password' => ''
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
# Secondary database connection
'mysql2' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'bdd2',
'username' => 'root',
'password' => ''
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
),
);
定义模型:
class Products extends Model {
protected $connection = 'mysql';
}
定义控制器:
class ProductController extends BaseController {
public function find()
{
$productModel= new Products;
$productModel->setConnection('mysql2');
$product= $productModel->find(1);
return $product;
}
}
上面的代码工作正常,但如果我更改控制器中连接的名称,它将继续使用.env文件中配置的名称
请问,有人能帮我解决这个问题吗?
有两种方法可以实现这一点,一旦您动态更改连接,您就必须传播连接,您可以这样做。
if ($this->propogateConnection) {
$instance->setConnection($this->getConnectionName());
}
另一件事是您可以使用Model::on('connection_name',true)
,true用于传播连接。
希望这有帮助。
您可以在.env
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=bdd1
DB_USERNAME=root
DB_PASSWORD=
DB_CONNECTION_SECOND=mysql2
DB_HOST_SECOND=localhost
DB_PORT_SECOND=3306
DB_DATABASE_SECOND=bdd2
DB_USERNAME_SECOND=root
DB_PASSWORD_SECOND=
在config/database.php
中:
'mysql' => [
'driver' => env('DB_CONNECTION'),
'host' => env('DB_HOST'),
'port' => env('DB_PORT'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
],
'mysql2' => [
'driver' => env('DB_CONNECTION_SECOND'),
'host' => env('DB_HOST_SECOND'),
'port' => env('DB_PORT_SECOND'),
'database' => env('DB_DATABASE_SECOND'),
'username' => env('DB_USERNAME_SECOND'),
'password' => env('DB_PASSWORD_SECOND'),
],
祝你好运
我正在开发一个具有多个数据库访问的应用程序,我想用它进行PHPUnit测试。我目前的方法是在中拥有多个连接(mysql,mysql2,mysql3),这样我就可以在env文件中对所有这些连接进行不同的访问。因此,模型定义了变量。在我的第一个功能测试中,我想访问一个页面,只看到我在工厂提供的数据,所以只是为了让事情开始。在我的文件中,我已经将指定为,并且对于每个MySql设置都具有。 稍后编辑 所以
我正在创建一个Laravel/最新版本的应用程序,它需要创建数百个sql表来服务于此项工作。还有数百个客户机的数据将被多次插入这些表中(每个客户机1000行或某些表中更多)。为了消除混淆,我需要一个通用/通用数据库来提供公共信息,并为每个客户机提供单独的数据库来提供特定信息,并且希望在添加客户机时创建新的数据库。这可以在Laravel(一次处理多个数据库)中实现,还是有其他PHP框架可以更好地实现
我不确定这是否可能,但我在安装Laravel时遇到了这种情况。 我正在运行3个实时数据库(随着时间的推移会更多),我有一个laravel安装,我想做的是使用不同的连接合并所有数据,并运行1个查询,以获得所有关系等所有数据使用雄辩。所有的数据库在表设计、索引、键等方面都是一样的,但我不确定是否可能! 我希望能够编写一个查询,例如:
我找不到连接多个db和链sql查询的方法, 如何使用原始mysql语法? 如何使用拉威尔方法?
我正在构建一个需要连接2个数据库的应用程序。第一个是静态的,另一个是动态的。config/database.php类似于 模型代码就像 如果我提供静态连接详细信息,我可以连接多个数据库,但如果我提供动态连接详细信息,如 或 动态连接多个数据库而不影响应用程序性能的最佳方法是什么?
所以我有数百个数据库,我想根据我传递的值来改变使用什么数据库 例如,我有许多公司分支机构有branch_code(000,001,002,003等。高达200)。它们都有相同的表,但只是在不同的数据库中创建的。还假设只有DB Name不同。我的问题是,当有数百个数据库时,我如何访问不同的数据库?我应该动态更改. env文件吗?当用户选择另一个分支时,我应该创建一个改变连接的函数吗?如果是的话,怎么