我试图找出它来为角色的所有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');
}
}
答案 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