2017-09-13 79 views
0

简单的代码将无法正常工作!我不断收到错误试图与if语句行获得非对象的财产。我试图访问这个像一个数组我收到一条消息,说它不能作为一个数组访问一个stdClass。Laravel试图让非对象的属性在对象

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,和$ DD group_can给此:

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 
} 

使用$设定= $ group_can->设置;返回错误试图获得非对象的属性

使用$设定= $ group_can [“设置”];返回错误不能使用类型stdClass的的对象作为阵列

的laravel错误的细节:

在HandleExceptions->的HandleError(8,“试图获得非对象的属性”, '/home/mwsubmissions/public_html/jon/MWSubmissionManager/app/User.php',91,阵列( '烫发'=> 'manage.projects', '剑度'=> 1, '基团'=>对象(集合) '许可'=>对象(stdClass的), 'MYGROUP'=>对象(stdClass的), '基团'=>空值, 'group_can'=>空值, '设置'=> 1))

编辑 我删除了我是有错误的代码的第一部分,然后得到了这一点,同样的事情又例如,但使用较小的对象,此行是一次比一次更重要。所有细节已更新。

+0

'$组=组::找到($ mygroup-> GROUP_ID);' 应该是 '$组=组::找到($ mygroup-> ID);' –

+0

@AnarBayramov负。 $ mygroup来自之前提到的$ groups查询,这是一个只有2列group_id和user_id的数据透视表。 $ group对象正在查找适当的数据,我无法访问它。 – MasterZ

+0

你可以在foreach中分享'return dd($ mygroup)'吗? – C2486

回答

1

你可以更好的检查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; 
      } 
     } 
    } 
    } 
+0

我只是用isset为$ group_can(见我更新的问题),并尝试通过它,然后当我尝试访问$ group_can中的任何数据时,我收到了一个错误消息。 – MasterZ

+2

我可以说你正在获取数据在循环中可能是任何一行没有数据。你print_r $ group_can)和发布结果 – iCoders

+0

该信息是在原来的问题,但在这里它又是:stdClass对象 ( [group_id] => 1 [permission_id] => 50 [setting] => 1 ) – MasterZ

0

你想访问的属性是一个数组“属性”的元素,所以尝试:

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; 
     } 
    } 
} 

希望这有助于:)

+0

没有。刚刚尝试过并获得相同的尝试在同一行中获取非对象错误的属性。 – MasterZ

+0

对不起,我只注意到属性数组被保护..检查类,看看是否有与Laravel这个应用我都以同样的方式访问相同数据的getter方法(如$组 - >的getAttributes())来检索属性:) – flauntster

+0

纵观每一个DB查询。我想不通,为什么这个人是不同的...... – MasterZ

0

首先,确保在组模型中添加“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; 
     } 
    } 
}