如何使用laravel集合方法

时间:2017-09-21 17:11:48

标签: php laravel laravel-5.4 laravel-collection

我试图查询嵌套关系并获取远程模型计数的计数,我将其转换为变量,但它没有发生:

$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', 'Research');
            });
        }]);
    }])
    ->get()
    ->transform(function ($company) {
        $company->contacts_association_count = $company->interactionSummaries
            ->pluck('interaction.contacts_association_count')
            ->collapse()
            ->sum();
    });

当我尝试dd($companies)甚至return $companies时,我会在每个数组索引中放置空值

Null values in array keys

但是当我在变换中dd($company)

->transform(function ($company) {
    $company->contacts_association_count = $company->interactionSummaries
        ->pluck('interaction.contacts_association_count')
        ->collapse()
        ->sum();
    dd($company);
});

我得到了一个表明我的查询正常运行的单个集合:

single instance

如果我删除转换部分并只是获取集合:

$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', 'Research');
            });
        }]);
    }])
    ->get()

我获得了所需的输出,但我不知道变换执行后它发生了什么。事实上,它并没有采摘和增加总和,因为我在计数中得到全部0。

collection count

我用红色标记了他们。帮帮我吧

2 个答案:

答案 0 :(得分:2)

我认为你在转换闭包中缺少return语句。

答案 1 :(得分:0)

您需要在转换中输入 return $ company 语句。