版本说明:laravel 5.8/laravel-admin 1.7
表和模型:
![7f2339468a1e46ccf04dac9073946b56.png](https://i-blog.csdnimg.cn/blog_migrate/3716f93e94fd04755cf4eaa20c90dee4.jpeg)
PortalCategory MODEL 文件定义
<?php
namespace AppAdminModels;
use EncoreAdminTraitsAdminBuilder;
use EncoreAdminTraitsModelTree;
use IlluminateDatabaseEloquentModel;
class PortalCategory extends Model
{
use ModelTree, AdminBuilder;
protected $table="portal_category";
protected $fillable = ['parent_id', 'name', 'list_order'];
protected $with = [
'parent'
];
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
$this->setParentColumn('parent_id');
$this->setOrderColumn('list_order');
$this->setTitleColumn('name');
}
/**
* 该分类下的子分类
*/
public function child(){
return $this->hasMany(get_class($this),'parent_id',$this->getKeyName());
}
/**
* 该分类的父分类
*/
public function parent(){
return $this->hasMany(get_class($this),$this->getKeyName(),'parent_id');
}
}
使用了两个trait:ModelTree
和AdminBuilder
方便构造树形结构数据。 需要注意的是在定义表结构时,需要存在parent_id, order_list, name字段,当然意义上跟其一致即可,名称可以随意定义,可以在构造方法中设置对应字段的名称。
控制器定义:
AdminPortalCategory.php的定义:
<?php
namespace AppAdminControllers;
use AppAdminModelsPortalCategory;
use AppAdminModelsPortalPost;
use EncoreAdminControllersHasResourceActions;
use EncoreAdminLayout{Column, Row, Content};
use EncoreAdmin{Tree,Form};
use EncoreAdminWidgetsBox;
use IlluminateHttpRedirectResponse;
/**
* 分类管理
* @package AppAdminControllers
*/
class AdminPortalCategory extends Content
{
use HasResourceActions;
/**
* Title for current resource.
*
* @var string
*/
protected $title = '文章分类管理';
/**
* 首页
* @pa