我在使用Eloquent为多个数据库连接(示例主数据库,DB1,DB2,DB3等)连接两个表时遇到问题。让我在下面简要解释一下: -
假设,我有两个表1.类别和2.产品。这两个表的模型如下: -
1)Category.php
类别类扩展了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)Product.php
类产品扩展了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 ....) 但经过一段时间后,我们发现雄辩的ORM使用多个选择查询而不是连接。
我们的概念是,我们有一个主数据库和从系统创建的其他动态数据库。我们需要连接多个数据库表以获得某些功能,这是我们现在无法做到的。我们无法使用新的动态数据库覆盖Main数据库连接。
我们可以解决这个问题吗? Laravel还提供关闭/销毁先前连接并连接新数据库(如Core PHP)的功能吗?
由于
答案 0 :(得分:3)
请在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';
现在,设置使用控制器文件中的数据库连接
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的产品类别数组。
谢谢, Monang Shah