【发布时间】:2018-02-21 14:42:36
【问题描述】:
简单的代码行不通!我不断收到错误 尝试获取非对象的属性 与 if 语句一致。我尝试像访问数组一样访问它,但收到一条消息说它无法将 stdClass 作为数组访问。
public function isAllowed($perm)
{
$cando = 0;
$groups = DB::table('group_user')->where('user_id', $this->id)->get();
foreach ($groups as $mygroup)
{
$group_can = DB::table('group_permission')->where([
['permission_id', $permission->id],
['group_id', $mygroup->group_id]
])->first();
$setting = $group_can->setting; // Error returns for this line //
if ($setting > $cando)
{
$cando = $setting;
}
}
}
print_r、var_dump 和 $group_ 的 dd 可以给出:
stdClass Object
(
[group_id] => 1
[permission_id] => 50
[setting] => 1
)
object(stdClass)#555 (3) { ["group_id"]=> int(1) ["permission_id"]=> int(50) ["setting"]=> int(1) }
{#555 ▼
+"group_id": 1
+"permission_id": 50
+"setting": 1
}
使用 $setting = $group_can->setting;返回错误尝试获取非对象的属性
使用 $setting = $group_can['setting'];返回错误不能使用 stdClass 类型的对象作为数组
laravel报错详情如下:
在 HandleExceptions->handleError(8, '试图获取非对象的属性', '/home/mwsubmissions/public_html/jon/MWSubmissionManager/app/User.php', 91, array('perm' => 'manage.projects', 'cando' => 1, 'groups' => object(Collection), 'permission' => object(stdClass), 'mygroup' => object(stdClass), 'group' => null, 'group_can' => null, 'setting' => 1))
编辑 我删除了我遇到错误的代码的第一部分,然后得到了这个,另一个相同的例子,但是使用了一个更小的对象,这一行比上一行更重要。已更新所有详细信息。
【问题讨论】:
-
$group = Group::find($mygroup->group_id);应该是$group = Group::find($mygroup->id); -
@AnarBayramov 否定。 $mygroup 来自前面提到的 $groups 查询,它是一个只有 2 列的数据透视表,group_id 和 user_id。 $group 对象正在寻找合适的数据,但我无法访问它。
-
你能在 foreach 中分享
return dd($mygroup)吗? -
@user2486 我用更详细的内容更新了问题,并在 foreach 中添加了一个 dd。我删除了前一行代码并继续执行下一个更重要的返回相同错误的代码行。
-
是
$permission还是$perm?