setConnection($connection); $this->setTable(config('tenancy.database.menu_table')); parent::__construct($attributes); } /** * A Menu belongs to many roles. * * @return BelongsToMany */ public function roles(): BelongsToMany { $pivotTable = config('tenancy.database.role_menu_table'); $relatedModel = config('tenancy.database.roles_model'); return $this->belongsToMany($relatedModel, $pivotTable, 'menu_id', 'role_id'); } /** * @return array */ public function allNodes(): array { $connection = config('tenancy.database.connection') ?: config('database.default'); $orderColumn = DB::connection($connection)->getQueryGrammar()->wrap($this->orderColumn); $byOrder = 'ROOT ASC,'.$orderColumn; $query = static::query(); if (config('tenancy.check_menu_roles') !== false) { $query->with('roles'); } return $query->selectRaw('*, '.$orderColumn.' ROOT')->orderByRaw($byOrder)->get()->toArray(); } /** * determine if enable menu bind permission. * * @return bool */ public function withPermission() { return (bool) config('tenancy.menu_bind_permission'); } /** * Detach models from the relationship. * * @return void */ protected static function boot() { static::treeBoot(); static::deleting(function ($model) { $model->roles()->detach(); }); } }