Laravel пытается получить свойство необъекта в объекте

Простой код не будет работать! Я получаю ошибку Попытка получить свойство необъекта на линии с оператором 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 и 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
}

Использование $ setting = $ group_can-> setting; возвращает ошибку Попытка получить свойство необъекта

Использование $ setting = $ group_can [‘setting’]; возвращает ошибку Невозможно использовать объект типа stdClass в качестве массива

Детали ошибки laravel:

в HandleExceptions-> handleError (8, ‘Попытка получить свойство необъекта’, ‘/home/mwsubmissions/public_html/jon/MWSubmissionManager/app/User.php’, 91, управлять массивом (‘perm’ => ‘). projects ‘,’ cando ‘=> 1,’ groups ‘=> object (Collection),’missions’ => object (stdClass), ‘mygroup’ => object (stdClass), ‘group’ => null, ‘group_can’ => null, ‘setting’ => 1))

РЕДАКТИРОВАТЬ
Я удалил первую часть кода, с которой у меня были ошибки, а затем перешел к этому, еще одному примеру того же самого, но с использованием меньшего объекта, и эта строка более важна, чем предыдущая. Все детали обновлены.

0

Решение

Лучше ты можешь проверить 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;
}
}
}
}
1

Другие решения

Свойство, к которому вы пытаетесь получить доступ, является элементом массива ‘attribute’, поэтому попробуйте:

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

Во-первых, убедитесь, что вы добавили «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;
}
}
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector