Laravel 查询生成器中来自不同数据库的联合查询

alm*_*lmo 2 mysql laravel laravel-4

我在两个不同的数据库中有两个相似的表。两个表都有一列包含日期,一列包含电子邮件地址。虽然列名不一样。因此,我想要一个包含两个表中所有记录的结果。

所以我的第一步是:

$emails_1 = DB::connection('db1')->table('contacts_1')->select('mail_address AS email', 'date as created_at');
$emails_2 = DB::connection('db2')->table('contacts_2')->select('email', 'created_at');
Run Code Online (Sandbox Code Playgroud)

所以现在我有两个结果,并且结果中的列名相等(email 和created_at)。

现在我想将结果合并在一起,所以我这样做:

$all_emails = $emails_1->union($emails_2);
Run Code Online (Sandbox Code Playgroud)

这就是我收到错误的地方:

未找到基表或视图:1146 表 'db1.contacts_2' 不​​存在 (SQL: (select mail_addressas email, dateas created_at from contacts_1) union (select email, created_atfrom contacts_2))

因此,查询生成器似乎与不同的表混淆了。

有人帮忙吗?

Jar*_*zyk 5

您不能使用不同的连接,但您仍然可以显式提供数据库名称:

$q1 = DB::table('db1.contacts')
       // where(..) or anything you need here
       ->select('mail_address as email', 'date as created_at');

$q2 = DB::table('db2.contacts')
       // like above
       ->select('email', 'created_at');

$result = $q2->union($q1)->get();
Run Code Online (Sandbox Code Playgroud)