true, ]; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = ['parent_id', 'order', 'title', 'icon', 'uri', 'extension', 'show']; /** * Create a new Eloquent model instance. * * @param array $attributes */ public function __construct(array $attributes = []) { $connection = config('admin.database.connection') ?: config('database.default'); $this->setConnection($connection); $this->setTable(config('admin.database.menu_table')); parent::__construct($attributes); } /** * A Menu belongs to many roles. * * @return BelongsToMany */ public function roles(): BelongsToMany { $pivotTable = config('admin.database.role_menu_table'); $relatedModel = config('admin.database.roles_model'); return $this->belongsToMany($relatedModel, $pivotTable, 'menu_id', 'role_id'); } public function permissions(): BelongsToMany { $pivotTable = config('admin.database.permission_menu_table'); $relatedModel = config('admin.database.permissions_model'); return $this->belongsToMany($relatedModel, $pivotTable, 'menu_id', 'permission_id'); } /** * Get all elements. * * @param bool $force * * @return static[]|\Illuminate\Support\Collection */ public function allNodes(bool $force = false) { if ($force || $this->queryCallbacks) { return $this->fetchAll(); } return $this->remember(function () { return $this->fetchAll(); }); } /** * Fetch all elements. * * @return static[]|\Illuminate\Support\Collection */ public function fetchAll() { return $this->withQuery(function ($query) { if (static::withPermission()) { $query = $query->with('permissions'); } return $query->with('roles'); })->treeAllNodes(); } /** * Determine if enable menu bind permission. * * @return bool */ public static function withPermission() { return config('admin.menu.bind_permission') && config('admin.permission.enable'); } /** * Determine if enable menu bind role. * * @return bool */ public static function withRole() { return (bool) config('admin.permission.enable'); } /** * Detach models from the relationship. * * @return void */ protected static function boot() { static::treeBoot(); static::deleting(function ($model) { $model->roles()->detach(); $model->permissions()->detach(); $model->flushCache(); }); static::saved(function ($model) { $model->flushCache(); }); } }