界面
代码
<?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-