douyangqian5243 2017-09-22 03:12
浏览 31
已采纳

如何使用laravel collection helper方法?

I'm trying to build a small application on laravel-5.4 where I'm having a relational query something like this:

$companies = Company::where('is_client', '=', 1)
    // load count on distant model
    ->with(['interactionSummaries.interaction' => function ($q) {
        $q->withCount(['contactsAssociation' => function ($q) {
            $q->whereHas('company', function ($q) {
                $q->where('type', 'like', 'Investor');
            });
        }]);
    }])
    ->get();

Now I want to collect all the contact_association_counts generated from the query and add it to individual company collection For this I'm using pluck, collapse and sum method, but I don't know it is not calculating as desired. Following is the screenshots:

I get list of collection as following:

list of company

Now I get the attributes:

Attributes

Now relational data:

relational data

Now interaction data, where the count belongs:

Interaction data

So for this I tried:

$companies = Company::where('is_client', '=', 1)
    // load count on distant model
    ->with(['interactionSummaries.interaction' => function ($q) {
        $q->withCount(['contactsAssociation' => function ($q) {
            $q->whereHas('company', function ($q) {
                $q->where('type', 'like', 'Investor');
            });
        }]);
    }])
    ->get()
    ->transform(function ($company) {
        $company->contacts_association_count = $company->interactionSummaries
            ->pluck('interaction.contacts_association_count')
            ->collapse()
            ->sum();
        return $company;
    });

But this is not calculating the counts, all the counts are coming to 0

Help me out in this. Thanks

  • 写回答

1条回答 默认 最新

  • dtxpz8785 2017-09-22 03:35
    关注

    I believe that your problem is the ->collapse() seeing your example after the ->pluck('interaction.contacts_association_count') you should have a flat array as [1,2,3,4,5] if you apply collapse() to a flat array it returns a void array [] and the sum of a void array is 0

    $companies = Company::where('is_client', '=', 1)
        // load count on distant model
        ->with(['interactionSummaries.interaction' => function ($q) {
            $q->withCount(['contactsAssociation' => function ($q) {
                $q->whereHas('company', function ($q) {
                    $q->where('type', 'like', 'Investor');
                });
            }]);
        }])
        ->get()
        ->transform(function ($company) {
            $company->contacts_association_count = $company->interactionSummaries
                ->pluck('interaction.contacts_association_count')
                //->collapse()
                ->sum();
            return $company;
        });
    

    I hope it works... good luck!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line