拉拉维尔 4 : Joining two tables using Eloquent for multiple database connections

标签 laravel laravel-4

我在使用 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/

相关文章:

laravel - Php电子表格: How to save the spreadsheet with a Laravel storage disk?

php - Raspberry Pi 是否足够强大来运行 Laravel 应用程序?

laravel - laravel5中 `--table`和 `--create`选项之间的差异使:migration

php - 使用 Laravel 4 进行预先输入 Remote - 我认为各个部分可以工作,但不能一起工作

laravel - Laravel 4 中带有 Carbon 的 TIME 列

php - Laravel 模型、构建器和集合之间的区别

php - 无法使用 PHP 5.5 在 Ubuntu 14.04 上的 Laravel 4.2 中获得任何路由

php - 来自 php 的 dump-autoload 命令

php - 如何解决我的 Laravel 对同一列名的查询之间的问题

testing - Laravel 4 - 单元测试