mysql - 在 Laravel Query Builder 中合并来自不同数据库的查询

标签 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');

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

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

$all_emails = $emails_1->union($emails_2);

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

Base table or view not found: 1146 Table 'db1.contacts_2' doesn't exist (SQL: (select mail_address as email, date as created_at from contacts_1) union (select email, created_at from contacts_2))

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

有人帮忙吗?

最佳答案

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

$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();

关于mysql - 在 Laravel Query Builder 中合并来自不同数据库的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27194651/

相关文章:

php - 通过mysql中的php从android存储以base64编码的图像

php - 在 Laravel 中递归创建文件夹

php - Laravel 数据透视表和模型事件

mysql - 如何使用SQL LIKE来匹配结果

mysql - INNER JOIN 但不编辑行

php - 库存数据结转到第二天

laravel - 在 null 上调用成员函数 createToken()

php - 翻译排队的邮件(本地化)

php - 在 Laravel 路由中使用参数调用自定义类方法

Laravel4 : Will not using the repository pattern hurt my project in the long run?