收集总和对象Lavarel丝毫关系回调的数组

时间:2018-03-31 15:34:53

标签: eloquent laravel-5.2

我试图找出它来为角色的所有levelAccess加总。 这是我的数据:

{
    "id": 1,
    "uuid": "1fdc0660-1b0f-11e8-b9e8-b5c43c94fc8c",
    "name": "admin",
    "total_levelAccess": null,
    "level_accesses": [
        {
            "id": 1,
            "userRoleId": 1,
            "levelAccess": 6,
            "code": "location"
        },
        {
            "id": 2,
            "userRoleId": 1,
            "levelAccess": 6,
            "code": "business"
        },
        {
            "id": 3,
            "userRoleId": 1,
            "levelAccess": 6,
            "code": "account"
        },
        {
            "id": 4,
            "userRoleId": 1,
            "levelAccess": 6,
            "code": "review"
        }
    ]
},
{
    "id": 2,
    "uuid": "1fdc2980-1b0f-11e8-a6e9-7934303e6543",
    "name": "editor",
    "total_levelAccess": null,
    "level_accesses": [
        {
            "id": 5,
            "userRoleId": 2,
            "levelAccess": 6,
            "code": "location"
        },
        {
            "id": 6,
            "userRoleId": 2,
            "levelAccess": 2,
            "code": "business"
        },
        {
            "id": 7,
            "userRoleId": 2,
            "levelAccess": 2,
            "code": "account"
        },
        {
            "id": 8,
            "userRoleId": 2,
            "levelAccess": 6,
            "code": "review"
        }
    ]
}

这是我的代码:

$userRoleWithLevel = UserRole::with('levelAccesses')->get();

$userRoleWithLevel->map(function ($userRole) {
$$userRole->total_levelAccess = $userRole->level_accesses->sum(function ($levelAccesses) {
return $levelAccesses->levelAccess;
});
return $userRole;
});

and 

$userRoleWithLevel->map(function ($userRole) {
    $userRole->total_levelAccess = $userRole->level_accesses;
                return $order;
});

我收到了错误

FatalThrowableError in ApiSystemController.php line 49:
Call to a member function sum() on null

我无法访问level_access。

我试过这个回答

Laravel Sum a Collection with multiple items

我们使用Laravel 5.2

请有人帮助我。

我的UserRole模型:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model as Eloquent;
use App\Models\LevelAccess;

class UserRole extends Eloquent
{
    public $timestamps = false;

    protected $table = 'userRoles';
    protected $connection = 'system';
    protected $fillable = [
        'uuid',
        'name'
    ];

    public function levelAccesses()
    {
        return $this->hasMany(LevelAccess::class, 'userRoleId','id');
    }

// I try this but it doesn't work to.
    public function sumlevelAccesses()
    {
        return $this->hasMany(LevelAccess::class,'userRoleId','id')
            ->selectRaw('SUM(levelAccess) as total_Level')
            ->groupBy('userRoleId');
    }
}

1 个答案:

答案 0 :(得分:0)

过了一会儿,我发现了什么。它的$ userRole-&gt; Level_accesses 是得分不足。

$userRoleWithLevel->map(function ($userRole) {
                    $userRole->total_levelAccess = $userRole->*levelAccesses*->sum(function ($level_Accesses) {
                        return $level_Accesses->levelAccess;
                    });
                    return $userRole;
                });

之后我的结果就是我尝试做的事情。

[
    {
        "id": 1,
        "uuid": "1fdc0660-1b0f-11e8-b9e8-b5c43c94fc8c",
        "name": "admin",
        "total_levelAccess": 24,
        "level_accesses": [
            {
                "id": 1,
                "userRoleId": 1,
                "levelAccess": 6,
                "code": "location"
            },
            {
                "id": 2,
                "userRoleId": 1,
                "levelAccess": 6,
                "code": "business"
            },
            {
                "id": 3,
                "userRoleId": 1,
                "levelAccess": 6,
                "code": "account"
            },
            {
                "id": 4,
                "userRoleId": 1,
                "levelAccess": 6,
                "code": "review"
            }
        ]
    }
]

谢谢@Jonas Staudenmeir