在Laravel Query Builder中合并来自不同数据库的查询 [英] Union queries from different databases in Laravel Query Builder

查看:224
本文介绍了在Laravel Query Builder中合并来自不同数据库的查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在两个不同的数据库中有两个相似的表.两个表都有一列带有日期,一列带有电子邮件地址.尽管列名不同.结果,我希望得到一个包含两个表中所有记录的结果.

I have two similar tables in two different databases. Both tables have a column with a date and one with email addresses. Though the column names are not the same. As result I want to have one result that contains all records from both tables.

所以我的第一步是:

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

所以现在我有两个结果,结果中的列名相等(电子邮件和created_at).

So now I have two results and the column names in the result are equal (email and created_at).

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

Now I want to merge the results together, so I do:

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

这是我得到错误的地方:

And this is where I get the error:

找不到基本表或视图:1146表'db1.contacts_2'未找到 存在(SQL:(选择mail_address作为emaildate作为created_atcontacts_1)并集(从emailcreated_at中选择 contacts_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))

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

So it seems that query builder gets confused with the diferente tables.

有人帮忙吗?

推荐答案

您不能使用其他连接,但是仍然可以明确地提供数据库名称:

You can't use different connections, but you still can do it providing the db name explicitly:

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

这篇关于在Laravel Query Builder中合并来自不同数据库的查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆