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:

    id          - integer
    parent_id   - integer
    order       - integer
    title       - string

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:


namespace App\Models;

use OpenAdmin\Admin\Traits\AdminBuilder;
use OpenAdmin\Admin\Traits\ModelTree;
use Illuminate\Database\Eloquent\Model;

class Category extends Model
    use ModelTree, AdminBuilder;

    protected $table = 'demo_categories';

    public function __construct(array $attributes = [])



This code below only creates a sortable tree. You need to add you own logic to create / alter and save the strucure. Happy coding, on request we might extend this part of code to be more usefull :-)z


namespace App\Admin\Controllers;

use App\Http\Controllers\Controller;
use App\Models\Category;
use OpenAdmin\Admin\Form;
use OpenAdmin\Admin\Facades\Admin;
use OpenAdmin\Admin\Layout\Content;
use OpenAdmin\Admin\Controllers\ModelForm;
use OpenAdmin\Admin\Tree;

class CategoryController extends Controller
    use ModelForm;

    public function index()
        return Admin::content(function (Content $content) {

You can modify the display of branch in the following ways:

Category::tree(function ($tree) {
    $tree->branch(function ($branch) {
        $src = config('') . '/' . $branch['logo'] ;
        $logo = "<img src='$src' style='max-width:30px;max-height:30px' class='img'/>";

        return "{$branch['id']} - {$branch['title']} $logo";

The $branch parameter is array of current row data.

If you want to modify the query of the model, use the following way:

Category::tree(function ($tree) {

    $tree->query(function ($model) {
        return $model->where('type', 1);