Laravel连接表并连接行

时间:2016-12-02 10:37:58

标签: mysql laravel laravel-5.2

所以我有两个表,组织和联系人。两个表都有“电子邮件”列,我需要做的是保留组织名称,但在电子邮件列中连接所有电子邮件(组织的+所有联系人电子邮件)。

以下是一些我没试过的版本

1)这个没有分组:

$customers = DB::table('customers')
    ->whereRaw('LENGTH(customers.email) > 4')
    ->select([
        'customers.id',
        'customers.name',
        'customers.email'
    ]);

$contacts = DB::table('contacts')
    ->whereRaw('LENGTH(contacts.email) > 4')
    ->leftJoin('customers', 'contacts.customer_id', '=', 'customers.id')
    ->select([
        'customers.id',
        'customers.name',
        'contacts.email'
    ]);

return $customers
    ->union($contacts)
    ->select([
        'id',
        'name',
        DB::raw('GROUP_CONCAT(DISTINCT email, ", ") AS emails'),
    ])
    ->groupBy('id')
    ->get();

2)这个实际上非常接近,但它不会过滤掉联系人或客户都没有DB::raw('LENGTH(email) > 4')

的条目
return $customers = DB::table('customers')
                ->leftJoin('contacts', 'contacts.customer_id', '=', 'customers.id')
                ->select([
                    'customers.id',
                    'customers.name',
                    'registration',
                    DB::raw('GROUP_CONCAT(DISTINCT contacts.email, ", ") AS contact_emails'),
                    'customers.email'
                ])
                ->groupBy('customers.id')
                ->get();

3)我试图接近子查询(我知道它只会过滤掉没有电子邮件的联系人)

3.1)尝试子查询1会导致错误:JoinClause::whereRaw()不存在

return $customers = DB::table('customers')
            ->leftJoin('contacts', function($join) {
                $join->on('contacts.customer_id', '=', 'customers.id')
                    ->whereRaw('LENGTH(email) > 4');
            })...

3.2)这个产生下面的语法错误:

return $customers = DB::table('customers')
            ->leftJoin('contacts', function($join) {
                $join->on('contacts.customer_id', '=', 'customers.id')
                    ->where(DB::raw('LENGTH(email) > 4'));
            })
  Connection.php第333行中的

1/2 PDOException:SQLSTATE [42000]:语法   错误或访问冲突:1064您的SQL语法有错误;   检查与您的MySQL服务器版本对应的手册   正确的语法使用附近'?第1行customersid'分组

     Connection.php第713行中的

2/2 QueryException:SQLSTATE [42000]:语法   错误或访问冲突:1064您的SQL语法有错误;   检查与您的MySQL服务器版本对应的手册   正确的语法使用附近'?在第1行分组customersid'(SQL:   选择customersidcustomersnameregistration,   GROUP_CONCAT(DISTINCT contacts.email,“,”)AS contact_emails,   来自customers的{​​{1}}。email已加入customers   contactscontacts = customer_idcustomers和LENGTH(contacts.email)   4个分组idcustomers

3.3)一些例子说我应该这样做,但这会产生错误id

Not enough arguments for the on clause.

0 个答案:

没有答案