'datetime', ]; /** * The accessors to append to the model's array form. * * @var array */ protected $appends = [ 'profile_photo_url', ]; /** * @return \Illuminate\Support\Collection */ public function menus() { return Menu::whereNull('parent_id') ->where(function (Builder $query) { $permissions = $this->permissions->pluck('id')->push(...$this->roles->pluck('permissions')->flatten()->pluck('id')); $query->whereHas('permissions', function (Builder $query) use ($permissions) { $query->whereIn('permissions.id', $permissions); })->orDoesntHave('permissions'); }) ->orderBy('position') ->with('childsByPermissions') ->get() ->each([$this, 'changeChildsByPermissionsToChilds']); } /** * @param \App\Models\Menu $menu * @return void */ public function changeChildsByPermissionsToChilds(Menu $menu) { $menu->childs = collect($menu->childsByPermissions)->each([$this, 'changeChildsByPermissionsToChilds']); } }