当前位置: 首页 > 知识库问答 >
问题:

Laravel试图获取对象中非对象的属性

皇甫雨华
2023-03-14

简单的代码不起作用!我一直在用if语句获取行上非object的属性时出错。我尝试像数组一样访问它,但收到一条消息说它不能以数组的形式访问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;
          }
        }
     }

$group的print\u r、var\u dump和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\u可以-

返回错误不能使用stdClass类型的对象作为数组

laravel错误的详细信息如下:

可处理的例外情况-

编辑我删除了第一部分出错的代码,然后得到了这个,另一个相同的例子,但是使用了一个更小的对象,这一行比最后一行更重要。所有详细信息已更新。

共有3个答案

公孙威
2023-03-14

首先,确保您将project_id添加到组模型中的$fillable数组

public function isAllowed($perm)
{
  $cando = 0;
  $groups = DB::table('group_user')->where('user_id', $this->id)->get();

  foreach ($groups as $mygroup)
  {
      $group = Group::whereId($mygroup->group_id)->first();

      if (!is_null($group->attributes['project_id']))
      {
        continue;
      }
   }
}
乜建柏
2023-03-14

您试图访问的属性是数组“attributes”的元素,请尝试:

public function isAllowed($perm)
{
   $cando = 0;
   $groups = DB::table('group_user')->where('user_id', $this->id)->get();

   foreach ($groups as $mygroup)
   {
      $group = Group::find($mygroup->group_id);

       if (!is_null($group->attributes['project_id']))
       {
          continue;
       }
    }
 }

希望这有帮助:)

拓拔泓
2023-03-14

最好你可以检查isset

public function isAllowed($perm)
    {
       $cando = 0;
       $groups = DB::table('group_user')->where('user_id', $this->id)->get();

    if(isset($groups)&&count($groups)>0){
       foreach ($groups as $mygroup)
       {

            if(isset($mygroup->group_id)){
          $group = Group::find($mygroup->group_id);
        }
           if (!is_null($group->project_id))
           {
              continue;
           }
        }
    }
     }
 类似资料:
  • 问题内容: 我正在尝试制作更新表单,该表单将为选定的特定ID检索数据,并填写表单,以便其可用于更新。 当我单击特定条目(在我的情况下为Product)上的Edit时,它将带我到,但是对于我在表单元素中使用的每个变量,都显示错误 “试图获取非对象的属性”。 使用,我得到了正确的关联数组,因此正确传递了它。 这是我的摘录。 是包含所有键值对的数组,但由于某种原因我无法填写表格。 先感谢您! 问题答案:

  • 在响应中,我们接收一个xml文件,然后转换为SimpleXMLElement,然后根据需要访问元素和属性。然而,当直接从字符串响应加载xml而不是从保存的响应加载xml时,我们得到了“尝试获取非对象的属性”。 当使用simplexml\u load\u字符串而不是simplexml\u load\u文件时,什么会导致xml失败? 以下是xml文件的一个片段:

  • 问题内容: 我试图从中获取数据: 但是如果我想使用以下代码获取player_name变量: 我得到错误: 注意:尝试在第9行+ var_dump()的** \ htdocs \ index.php中获取非对象的属性将返回:NULL 返回: 问题答案: 这是因为是对象的单元素数组,所以首先应访问作为对象的数组元素,然后访问其属性。 您粘贴的转储结果实际上很清楚地告诉了它。

  • 无法显示要查看的数据库信息,出现错误 尝试获取非对象的属性 让我解释一下逻辑: 用户可以创建多个公司 我没有问题插入信息到数据库,一切都很好。我可以在我的显示视图中显示来自用户表和公司表的所有信息,但我不能在我的视图中显示来自Company_Items表的信息。我想我的关系或钥匙出了问题,但是什么?尝试显示属于特定公司的项目名称 公司表: id(int) company_name(字符串) 信息(

  • 问题内容: 这个问题已经在这里有了答案 : 调用非对象上的成员函数[重复] (8个答案) 6年前关闭。 在控制页面上: 在查看页面上: 错误是: 注意:尝试在第22行的C:\ wamp \ www \ phone \ pages \ init.php中获取非对象的属性 你能修好它吗?我不知道发生了什么。 问题答案: 检查手册。它返回一个对象,而不是对象数组。 我猜你想要这样的东西 可能我建议您看看

  • 这是我能言善辩的关系- 当我访问完整对象时- 我得到对象 但当我试图从对象中访问单个属性时- 我有错误 正在尝试获取非对象的属性'Office_Name'