ArticleCategory.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Model;
  4. use Illuminate\Database\Eloquent\SoftDeletes;
  5. use Encore\Admin\Traits\ModelTree;
  6. use Encore\Admin\Traits\AdminBuilder;
  7. //use Encore\Admin\Auth\Database\Role;
  8. use Illuminate\Database\Eloquent\Relations\BelongsToMany;
  9. use Encore\Admin\Facades\Admin;
  10. use Illuminate\Foundation\Auth\User;
  11. use App\Models\ArticleCategoryRole;
  12. use App\Models\Role;
  13. /**
  14. * App\Models\ArticleCategory
  15. *
  16. * @property int $id
  17. * @property string $category_name 分类名称
  18. * @property int $parent_id 分类父id
  19. * @property int $list_order 排序
  20. * @property string|null $title 标题
  21. * @property string|null $keywords 关键字
  22. * @property string|null $description 描述
  23. * @property int $admin_set 是否为系统自带(1是0否)
  24. * @property \Illuminate\Support\Carbon|null $created_at
  25. * @property \Illuminate\Support\Carbon|null $updated_at
  26. * @property string|null $deleted_at
  27. * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\ArticleCategory[] $children
  28. * @property-read \App\Models\ArticleCategory $parent
  29. * @property-read \Illuminate\Database\Eloquent\Collection|\Encore\Admin\Auth\Database\Role[] $roles
  30. * @method static bool|null forceDelete()
  31. * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ArticleCategory newModelQuery()
  32. * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ArticleCategory newQuery()
  33. * @method static \Illuminate\Database\Query\Builder|\App\Models\ArticleCategory onlyTrashed()
  34. * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ArticleCategory query()
  35. * @method static bool|null restore()
  36. * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ArticleCategory whereAdminSet($value)
  37. * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ArticleCategory whereCategoryName($value)
  38. * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ArticleCategory whereCreatedAt($value)
  39. * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ArticleCategory whereDeletedAt($value)
  40. * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ArticleCategory whereDescription($value)
  41. * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ArticleCategory whereId($value)
  42. * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ArticleCategory whereKeywords($value)
  43. * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ArticleCategory whereListOrder($value)
  44. * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ArticleCategory whereParentId($value)
  45. * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ArticleCategory whereTitle($value)
  46. * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ArticleCategory whereUpdatedAt($value)
  47. * @method static \Illuminate\Database\Query\Builder|\App\Models\ArticleCategory withTrashed()
  48. * @method static \Illuminate\Database\Query\Builder|\App\Models\ArticleCategory withoutTrashed()
  49. * @mixin \Eloquent
  50. */
  51. class ArticleCategory extends Model
  52. {
  53. use SoftDeletes,AdminBuilder,ModelTree {
  54. ModelTree::boot as treeBoot;
  55. }
  56. protected $table = 'article_categorys';
  57. public function __construct(array $attributes = [])
  58. {
  59. parent::__construct($attributes);
  60. $this->setParentColumn('parent_id');
  61. $this->setOrderColumn('list_order');
  62. $this->setTitleColumn('category_name');
  63. }
  64. public function parent()
  65. {
  66. return $this->belongsTo(ArticleCategory::class, 'parent_id', 'id');
  67. }
  68. public function children()
  69. {
  70. return $this->hasMany(ArticleCategory::class, 'parent_id', 'id');
  71. }
  72. public function roles() : BelongsToMany
  73. {
  74. $pivotTable = 'article_category_roles';
  75. $relatedModel = config('admin.database.roles_model');
  76. return $this->belongsToMany($relatedModel, $pivotTable, 'article_category_id', 'role_id');
  77. }
  78. protected static function boot()
  79. {
  80. static::treeBoot();
  81. static::deleting(function ($model) {
  82. $model->roles()->detach();
  83. });
  84. }
  85. protected static function categoryIds()
  86. {
  87. $is_admin = Admin::user()->isAdministrator();
  88. if ($is_admin) {
  89. $not_ids = null;
  90. } else {
  91. $user_roles = Admin::user()->roles->toArray();
  92. $roles_ids = array();
  93. if ($user_roles) {
  94. foreach ($user_roles as $k => $v) {
  95. $roles_ids[] = $v['pivot']['role_id'];
  96. }
  97. }
  98. //获取对应的分类id
  99. $rst = ArticleCategoryRole::whereIn('role_id', $roles_ids)->get(array('article_category_id'))->toArray();
  100. $role_cates = array();
  101. if ($rst) {
  102. foreach ($rst as $k => $v) {
  103. $role_cates[] = $v['article_category_id'];
  104. }
  105. }
  106. $not_cates = ArticleCategoryRole::whereNotIn('article_category_id', $role_cates)->get(array('article_category_id'))->toArray();
  107. $not_ids = array();
  108. if ($not_cates) {
  109. foreach ($not_cates as $k => $v) {
  110. $not_ids[] = $v['article_category_id'];
  111. }
  112. }
  113. }
  114. return $not_ids;
  115. }
  116. }