首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel:转换SQL查询,0结果

Laravel:转换SQL查询,0结果
EN

Stack Overflow用户
提问于 2015-06-24 23:56:36
回答 1查看 78关注 0票数 2

我正在尝试转换这个使用大量联接的SQL查询,以使用laravel自己的系统。

原始查询和工作查询:

代码语言:javascript
复制
$link = $this->pdo->prepare(
    "SELECT
            affiliates.affiliate_id,
            affiliate_details.firstname,
            affiliate_details.lastname,
            sum(case when affiliates.status = 'accept' then 1 else 0 end) as offers_active,
            sum(case when affiliates.status = 'deny' then 1 else 0 end) as offers_deny,
            sum(case when affiliates.status = 'pending' then 1 else 0 end) as offers_pending,
            count(invoices_aff.invoice_id) as sales,
            count(invoice_details.invoice_id) as refunds
    FROM
        affiliates
    INNER JOIN
        offers ON (offers.id = affiliates.offer_id and offers.vendor_id = :vendor_id)
    INNER JOIN
        user_details as affiliate_details ON (affiliate_details.user_id = affiliates.affiliate_id)
    LEFT JOIN
        invoices ON (invoices.offer_id = offers.id)
    LEFT JOIN
        invoices_aff ON (invoices_aff.invoice_id = invoices.invoice_id AND invoices_aff.affiliate_id = affiliates.affiliate_id)
    LEFT JOIN
        invoice_details ON (invoice_details.invoice_id = invoices_aff.invoice_id AND invoice_details.status = 'refunded')
    GROUP BY
        affiliates.affiliate_id
    "
);

$link->execute(array('vendor_id' => Auth::user()->id));

改为与拉拉一起工作:

代码语言:javascript
复制
$affiliates = DB::table('affiliates')
                ->select(
                    array(
                        'affiliates.affiliate_id',
                        'affiliate_details.firstname',
                        'affiliate_details.lastname',
                        DB::raw('sum(case when affiliates.status = "accept" then 1 else 0 end) as offers_active'),
                        DB::raw('sum(case when affiliates.status = "deny" then 1 else 0 end) as offers_deny'),
                        DB::raw('sum(case when affiliates.status = "pending" then 1 else 0 end) as offers_pending'),
                        DB::raw('count(invoices_aff.invoice_id) as sales'),
                        DB::raw('count(invoice_details.invoice_id) as refunds')
                    )
                )
                ->join('offers', function($join)
                {
                    $join->on('offers.id', '=', 'offers.vendor_id');
                    $join->on('offers.vendor_id', '=', DB::raw(Auth::user()->id));
                })
                ->join('user_details as affiliate_details', 'affiliate_details.user_id', '=', 'affiliates.affiliate_id')
                ->leftJoin('invoices', 'invoices.offer_id', '=', 'offers.id')
                ->leftJoin('invoices_aff', function($join)
                {
                    $join->on('invoices_aff.invoice_id', '=', 'invoices.invoice_id');
                    $join->on('invoices_aff.affiliate_id', '=', 'affiliates.affiliate_id');
                })
                ->leftJoin('invoice_details', function($join){
                    $join->on('invoice_details.invoice_id', '=', 'invoices_aff.invoice_id');
                    $join->on('invoice_details.status', '=', DB::raw("'refunded'"));
                })
                ->groupBy('affiliates.affiliate_id')
                ->get();

但它给了我0的结果。

我还不太熟悉Laravel查询生成器,但我已经非常正确地遵循了示例(至少在我自己的头脑中是这样),而且我在这里看不到自己的错误。

我这里的问题出什么问题了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-25 04:40:39

第一个连接(“要约”)出现了错误。应该是offers.id = affiliates.offer_id,而不是offers.id = offers.vendor_id。

代码语言:javascript
复制
   ->join('offers', function($join)
    {
        $join->on('offers.id', '=', 'affiliates.offer_id');
        $join->on('offers.vendor_id', '=', DB::raw(Auth::user()->id));
    });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31039097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档