2014-02-17 2 views
1

Я получаю массив разрешений, связанные с ролью конкретного пользователя, в основном, как способ, чтобы получить мою голову вокруг работы с жадной нагрузкой и каждый() методаLaravel возвращение массив из каждого() метода

При создании массива $ permissions таким образом, как бы я мог получить доступ к массиву вне закрытия?

$user = User::with('roles.perms')->find(1); 

$permissions = array(); 

$list = $user->roles->each(function($role) use($permissions) 
{ 
    $permissions = array_merge($permissions, $role->perms->toArray()); 
}); 

Спасибо!

ответ

7

Просто передать переменную $permissions по ссылке:

$user->roles->each(function($role) use(&$permissions) { //<-- passed by reference 
    $permissions = array_merge($permissions, $role->perms->toArray()); 
}); 

Обратите внимание на &, теперь у вас есть та же переменная объявлена ​​вне функции, и это в текущей области видимости и изменяется внутри крышки. ТАК, вы можете использовать $permissions здесь, например:

dd($permissions); // dump and die 
+2

Ах, справа. Закрытие копирует в область по умолчанию. Спасибо за это! – drpudding

+0

@drpudding, Welcome :-) –

+0

Этот ответ полезен и для меня на этот раз, но просто это слияние массивов не работает должным образом, поэтому я изменил на что-то вроде этого '$ permission [] = $ role-> perms -> ToArray(); ' –

Смежные вопросы