界面

代码

<?php

namespace App\Admin\Controllers\Demo;

use App\Models\Tag;
use App\Models\Video;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Facades\Admin;
use Encore\Admin\Layout\Content;
use App\Http\Controllers\Controller;
use Encore\Admin\Controllers\ModelForm;
use Encore\Admin\Widgets\Box;
use Encore\Admin\Widgets\Tab;

class VideoController extends Controller
{
    use ModelForm;
    ...

    protected function grid()
    {
        return Admin::grid(Video::class, function (Grid $grid) {

            $grid->id('ID')->sortable();

            $grid->title()->limit(30);

            $grid->status()->radio([
                0 => 'Sed ut perspiciatis unde omni',
                1 => 'voluptatem accusantium doloremque',
                2 => 'dicta sunt explicabo',
                3 => 'laudantium, totam rem aperiam',
            ]);

            $grid->tags()->pluck('name')->label();

            $grid->created_at();
            $grid->updated_at();
        });
    }

    protected function form()
    {
        return Admin::form(Video::class, function (Form $form) {

            $form->display('id', 'ID');

            $form->text('title');

            $form->radio('status')->options([
                0 => 'Sed ut perspiciatis unde omni',
                1 => 'voluptatem accusantium doloremque',
                2 => 'dicta sunt explicabo',
                3 => 'laudantium, totam rem aperiam',
            ]);

            $form->file('video');

            $form->datetime('release_at');

            $form->multipleSelect('tags')->options(Tag::all()->pluck('name', 'id'));

            $form->display('created_at', 'Created At');
            $form->display('updated_at', 'Updated At');
        });
    }

    ...
}

模型

app/Models/Video.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Video extends Model
{
    protected $table = 'demo_videos';

    public function tags()
    {
        return $this->morphToMany(Tag::class, 'taggable', 'demo_taggables');
    }
}

app/Models/Tag.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Tag extends Model
{
    protected $table = 'demo_tags';

    public function setOptionsAttribute($options)
    {
        if (is_array($options)) {
            $this->attributes['options'] = implode(',', $options);
        }
    }

    public function getOptionsAttribute($options)
    {
        if (is_string($options)) {
            return explode(',', $options);
        }

        return $options;
    }
}

表结构

CREATE TABLE `demo_videos` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `video` text COLLATE utf8_unicode_ci NOT NULL,
  `status` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `release_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `demo_tags` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `demo_taggables` (
 `tag_id` int(10) unsigned NOT NULL,
 `taggable_id` int(10) unsigned NOT NULL,
 `taggable_type` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
 `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-END-

results matching ""

    No results matching ""