首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Laravel Eloquent连接同一台服务器上不同数据库中的两个MySQL表

使用Laravel Eloquent连接同一台服务器上不同数据库中的两个MySQL表
EN

Stack Overflow用户
提问于 2017-01-02 16:40:46
回答 5查看 25.2K关注 0票数 8

我在两个不同的数据库中有两个表。这两个数据库托管在同一AWS RDS服务器上。我有一个用户帐户,可以访问这两个数据库。我在config\database.php中定义了两个不同的连接:

代码语言:javascript
复制
return array(
    'default' => 'mysql',
    'connections' => array(
        # Our primary database connection
        'mysql' => array(
            'driver'    => 'mysql',
            'host'      => 'samehost',
            'database'  => 'database1',
            'username'  => 'user1',
            'password'  => 'pass1'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),
        # Our secondary database connection
        'mysql2' => array(
            'driver'    => 'mysql',
            'host'      => 'samehost',
            'database'  => 'database2',
            'username'  => 'user2',
            'password'  => 'pass2'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),
    ),
);

我有两个连接到database1table1模型和一个连接到database2table2模型。这两个表都有一个列id。如何使用雄辩的模型连接具有相同id的行的查询

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-01-04 15:44:41

这个解决方案对我很有效:

代码语言:javascript
复制
Model1::where('postID',$postID)
      ->join('database2.table2 as db2','Model1.id','=','db2.id')
      ->select(['Model1.*','db2.firstName','db2.lastName'])
      ->orderBy('score','desc')
      ->get();
票数 15
EN

Stack Overflow用户

发布于 2017-01-02 17:27:52

如果两个数据库都在同一个连接上,并且设置为默认值,则可以使用这种方法进行尝试。

代码语言:javascript
复制
$query = DB::table('database1.table1 as dt1')->leftjoin('database2.table2 as dt2', 'dt2.ID', '=', 'dt1.ID');        
$output = $query->select(['dt1.*','dt2.*'])->get();

我已经在我的本地主机上试过了,它工作正常。

票数 4
EN

Stack Overflow用户

发布于 2017-01-02 18:07:24

这很棘手,但是可以实现的。然而,有一些限制,这可能导致原始的解决方案。

下面是你需要的,假设db1是默认的:

代码语言:javascript
复制
// class ModelOne
public function modelTwo()
{
return $this->hasOne('ModelTwo', 'id');
}

//class ModelTwo
protected $table = 'db2.model_two_table';

public function modelOne()
{
return $this->belongsTo('ModelOne', 'id');
}
// then
$model1 = ModelOne::with('modelTwo')->get();
$model1 = ModelOne::has('modelTwo')->first(); 
// and so on

请注意,在db配置中不能对表使用前缀。此外,如果您在其中一个模型上定义了非默认连接,则需要为这两个模型调整$table。

您还可以为每个模型使用不同的连接,许多功能都会像这样工作,但是您不能依赖于Eloquent构建的连接:

代码语言:javascript
复制
ModelOne::with('modelTwo')->get(); // works as expected - this is what you asked for
ModelOne::has('modelTwo')->get(); // error, no table found

当然,除非您有相同的模式,但无论如何这都不是您想要的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41423603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档