【问题标题】:Is it possible to join a MS-SQL to MySQL in Laravel是否可以在 Laravel 中将 MS-SQL 加入 MySQL
【发布时间】:2016-08-09 17:46:45
【问题描述】:

如果这是一个愚蠢的问题,我深表歉意。这可能远远超出标准做法,但我希望能够在 Laravel 5.2 中将来自 MS-SQL 数据库的数据与 MySQL 的数据连接起来。

我不确定是否可以做类似...

\DB::connection('sqlsrv')->table('mstable')
   ->leftJoin(\DB::connection('mysql')->table('mysqltable'), 
              'mysqltable.shared_id', 
              '=', 
              'mstable.shared_id');

我的想法是,如果 Laravel 足够早地将查询转换为 PHP 对象,它应该能够做到。否则,是否可以同时使用这两种数据库类型?

【问题讨论】:

  • 不,不是。但是,您可以尝试通过创建链接数据库在 MS-SQL 本身中执行此操作。性能和功能将受到限制
  • 不,你不能像这样跨不同的数据库服务器加入。

标签: php mysql sql-server laravel


【解决方案1】:

我很确定无法加入。但是,您可以做的是在不同的数据库上使用关系。根据您的情况,这可能是一个适用的解决方法。我目前正在使用这种方法来查询来自不同数据库的实体并将它们“分块”,以便我只在内存中保留几千个实体。它仍然是遍历所有实体的有效方法,因为我使用的是急切加载,因此 Laravel / Eloquent 仅触发每个块的两个请求:一个获取主要模型,第二个获取关系(默认情况下已完成通过使用从主模型表获得的键在关系表上的IN 语句)。

一种“简单”的设置方法是填充 Eloquent 模型的受保护的 $connection 属性,如下所示:

class Foo extends Model{

  protected $connection = "mysql";

  public function bar(){
    return $this->hasOne(Bar::class);
  } 
}

class Bar extends Model{

  protected $connection = "ms-sql";
}

Foo::with("bar")->get();

【讨论】:

    猜你喜欢
    • 2019-04-26
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    相关资源
    最近更新 更多