Can be achieved through a model-tree to a tree-like components, you can drag the way to achieve the level of data, sorting and other operations, the following is the basic usage.
Table structure and model
To use model-tree, you have to follow the convention of the table structure:
CREATE TABLE `demo_categories` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`parent_id` int(11) NOT NULL DEFAULT '0',
`order` int(11) NOT NULL DEFAULT '0',
`title` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
The above table structure has three necessary fields parent_id, order, title, and the other fields are not required.
The corresponding model is app/Models/Category.php:
<?php
namespace App\Models\Demo;
use Ezadev\Admin\Traits\AdminBuilder;
use Ezadev\Admin\Traits\ModelTree;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
use ModelTree, AdminBuilder;
protected $table = 'demo_categories';
}
Table structure in the three fields parent_id,order, title field name can be amended:
<?php
namespace App\Models\Demo;
use Ezadev\Admin\Traits\AdminBuilder;
use Ezadev\Admin\Traits\ModelTree;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
use ModelTree, AdminBuilder;
protected $table = 'demo_categories';
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
$this->setParentColumn('pid');
$this->setOrderColumn('sort');
$this->setTitleColumn('name');
}
}
Usage
Then use model-tree in your page
<?php
namespace App\Admin\Controllers\Demo;
use App\Http\Controllers\Controller;
use App\Models\Category;
use Ezadev\Admin\Form;
use Ezadev\Admin\Facades\Admin;
use Ezadev\Admin\Layout\Content;
use Ezadev\Admin\Controllers\ModelForm;
use Ezadev\Admin\Tree;
class CategoryController extends Controller
{
use ModelForm;
public function index()
{
return Admin::content(function (Content $content) {
$content->header('Categories');
$content->body(Category::tree());
});
}
}
You can modify the display of branch in the following ways: