我在使用 Eloquent 进行多个数据库连接(示例主数据库、DB1、DB2、DB3 等)连接两个表时遇到问题。下面让我简单解释一下:-
假设,我有两个表 1. 类别和 2. 产品。两个表的模型如下:-
1) 类别.php
类 Category 扩展了 Eloquent{
public $timestamps = false;
protected $table = 'categories;
protected $fillable = array('v_name','e_status');
public function products()
{
return $this->belongsTo(Product,'i_category_id');
}
}
2) 产品.php
类 Product 扩展了 Eloquent{
public $timestamps = false;
protected $table = products;
protected $fillable = array('v_name',’i_category_id’,'e_status');
public function categories()
{
return $this->belongsTo(Category,'i_category_id');
}
}
现在,在 ProductController.php
$objProduct = new Product;
$objProduct->setDBConnection($objdataAuth->v_db_name); // dynamic database connection name
$arrProductDetail = $objProduct->get()->section_activities()->get();
$arrProductDetail 不检索与类别相关的信息(即动态数据库的信息)。但是,它检索主数据库的类别(即在 app/database.php 中)。 如果我们只使用 $objProduct->get() 那么它会检索新数据库的所有产品(DB1,DB2......) 但经过一番研究后我们发现 eloquent ORM 使用的是多个 select 查询而不是 join。
我们的概念是我们有一个主数据库和另一个从系统创建的动态数据库。我们需要连接多个数据库表来实现某些功能,但目前还无法做到这一点。我们无法用新的动态连接覆盖主数据库连接。
我们能有什么解决办法吗? Laravel 是否还提供关闭/销毁先前连接并连接新数据库的功能(如 Core PHP)?
谢谢
最佳答案
请在app/database.php中添加以下代码
'mysql_dynamic_connection' => array(
'driver' => 'mysql',
'host' => 'host',
'database' => 'db_name',
'username' => 'username',
'password' => 'password',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
现在,在模型产品和类别中添加以下行,
protected $connection = 'mysql_dynamic_connection';
现在,将 Controller 文件中的数据库连接设置为
Config::set('database.connections.mysql_dynamic_connection.database', $objdataAuth->v_db_name);
其中 mysql_dynamic_connection = app/database.php 中的另一个数据库连接,$objdataAuth->v_db_name = 您的数据库连接名称
$objProduct = new Product;
$arrProductDetail = $objProduct->where('id','=',1)->first()->categories()->get();
echo '<pre>'; print_r($arrProductDetail);
您将获得id为1的产品的类别数组。
谢谢, 莫南沙阿
关于拉拉维尔 4 : Joining two tables using Eloquent for multiple database connections,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25360082/