Laravel 4:使用Eloquent连接两个表以进行多个数据库连接

时间:2014-08-18 09:28:54

标签: laravel laravel-4

我在使用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)的功能吗?

由于

1 个答案:

答案 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