【问题标题】:laravel complex query building with join and groupBylaravel 使用 join 和 groupBy 构建复杂查询
【发布时间】:2016-07-18 12:59:22
【问题描述】:

我是 laravel 新手,在核心 PHP 中有以下查询,需要 laravel 查询。

$query="select distinct(c.c_id), 1 'companyToken',c.companyname,u.email,creation_date,CONCAT(eu.firstname,' ',eu.lastname) 'Name' , group_concat(pk.package_name) 'Package Name/Service' ,  c.notes 'Notes' , c.demo_status 'Demo Status'  from ee_company c
                 left join et_company_payment_methods cpm on cpm.c_id=c.c_id
                 left join et_packages pk on cpm.package_id = pk.id
                 inner join (SELECT *
                 FROM `ee_users`
                 WHERE c_id IS NOT NULL
                 GROUP BY c_id) u on u.c_id=c.c_id
                 left join ee_users eu on eu.id=c.referred_by_user_id
                group by c.c_id";

我刚刚开始使用 laravel,所以发现很难转换如此复杂的查询。

现有系统可以很好地处理这个查询。

我尝试用 laravel 构建它。

$company = DB::table('ee_company')
            ->leftJoin('et_company_payment_methods', 'ee_company.c_id' , '=', 'et_company_payment_methods.c_id')
            ->leftJoin('et_packages', 'et_packages.id', '=', 'et_company_payment_methods.package_id')
            ->join('ee_users',function($join){
                                  $join->on('ee_company.c_id', '=', 'ee_users.c_id')
                                     ->whereNotNull('ee_users.c_id')
                                     ->groupBy('ee_users.c_id');
                })
            ->leftJoin('ee_users', 'ee_users.id', '=', 'ee_company.referred_by_user_id')
            ->groupBy('ee_company.c_id');

它给了我以下错误

Call to undefined method Illuminate\Database\Query\JoinClause::groupBy()

【问题讨论】:

  • 如果你不想将它转换成 Laravel 的 Eloquent 语法,你可以简单地使用 DB::raw(...)。我知道,这不是一个实际的答案,只是值得一提。
  • 如果你问我,Laravel 的流畅查询构建器是一个很棒的工具。我建议您逐步学习如何将此查询转换为流利的语法,这将是学习该工具的一个很好的练习。
  • SO 不是免费的编码或代码转换或教程或图书馆查找服务您还必须表明您已经为解决自己的问题付出了一些努力。
  • 如果您提到您拥有的表、列和所需的输出会更清楚;这是文档链接laravel.com/docs/master/queries,您可以在其中学习。
  • @RiggsFolly 我已经添加了我尝试过的代码以及我遇到的错误

标签: php mysql laravel orm


【解决方案1】:

试试这个

$company = DB::table('ee_company')
        ->leftJoin('et_company_payment_methods', 'ee_company.c_id' , '=', 'et_company_payment_methods.c_id')
        ->leftJoin('et_packages', 'et_packages.id', '=','et_company_payment_methods.package_id')
->join(DB::raw('SELECT *
             FROM `ee_users`
             WHERE c_id IS NOT NULL
             GROUP BY c_id'),function($join){
                              $join->on('u.c_id', '=', 'c.c_id');
            })
->leftJoin('ee_users', 'ee_users.id', '=', 'ee_company.referred_by_user_id')
->groupBy('ee_company.c_id');

【讨论】:

    猜你喜欢
    • 2019-08-05
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 2019-12-25
    • 2016-02-09
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    相关资源
    最近更新 更多