创建模型
php artisan make:model Home/Article
<?php
// php artisan make:model Home/Article
namespace App\Home;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use App\User;
class Article extends Model
{
use SoftDeletes; //软删除 deleted_at timestamp类型
protected $table = 'article'; //不定义table 默认对应的是 xxxs
public $timestamps = false; //默认会操作 created_at 和 updated_at 字段,表里面没有这两个字段的话要设置未false ,否则查询时会报错
protected $fillable=['id','category','title','content','status','sort','img','introduce','types','updated_at']; //可以填写的数据
// 关联作者模型 (一对一)
/**
* public function 被关联的模型名小写,不一定要用表明(){
* return $this->>hasOne('需要关联模型的命名空间','被关联模型的字段','本模型的字段');
* }
*/
public function users(){
return $this->hasOne(User::class,'id','user_id');
}
// 一对多
public function comments(){
return $this->hasMany(Comment::class,'article_id','id');
}
// 多对多
// return $this->belongsToMany('被关联模型的路径','多对多模型的关系表名','当前模型中的关系建','被关联的关系建');
public function keywords()
{
return $this->belongsToMany(Keyword::class,'a_to_k_tmp','article_id','key_id');
}
}
创建控制器
php artisan admin:make ArticeController --model=App\Home\Article
<?php
namespace App\Admin\Controllers;
use App\Home\Article;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Layout\Content;
use Encore\Admin\Show;
use App\User;
use Illuminate\Support\Facades\DB;
//php artisan admin:make ArticeController --model=App\Home\Article model是模板
class ArticleController extends AdminController
{
/**
* Title for current resource.
*
* @var string
*/
protected $title = '文章';
/**
* Make a grid builder.
*
* @return Grid
*默认情况下,表格的数据没有任何查询条件,可以使用model()方法来给当前表格数据添加查询条件:
$grid->model()->where('id', '>', 100);
$grid->model()->whereIn('id', [1, 2, 3]);
$grid->model()->whereBetween('votes', [1, 100]);
$grid->model()->whereColumn('updated_at', '>', 'created_at');
$grid->model()->orderBy('id', 'desc');
$grid->model()->take(100);
*/
protected function grid()
{
$model = new Article();
// $data = DB::table('article as a')->select('a.*','u.name')->join('users as u','a.user_id','=','u.id')->get(); //Db 联查
// $data = $model->join('users as u','article.user_id','=','u.id')->select('article.*','u.name')->get(); //model 联查
// foreach ($data as $key => $value){
// echo $value->id ;
// echo $value->name ;
// echo '<br>';
// }
$data = $model->get(); //模型关联
foreach ($data as $key => $value){
echo $value->id ;
echo $value->users->name ; //一对一
foreach ($value->comments as $k => $v){
dump($v->comment); //一对多
}
foreach ($value->keywords as $k2 => $v2){
dump($v2->keyword); //多对多
}
echo '<br>';
}
// dump($data);exit;
$grid = new Grid($model);
// $grid->model()
// ->join('users as u','article.user_id','=','u.id')
// ->select('article.*','u.name');
$grid->column('id', __('ID'));
// 通过display(category)方法来格式化显示输出
$grid->column('category', __('文章分类'))->display(function ($category){
if($category == 1){
return '系统公告';
}else{
return '其他';
}
});
// $grid->column('user_id', __('作者'))->display(function ($user_id){
// return DB::table('users')->where('id',$user_id)->value('name');
// });
// $grid->column('name', __('作者'));
$grid->column('users.name', __('作者')); //模型关联
$grid->column('title', __('标题'));
$grid->column('content', __('内容'));
$grid->column('status', __('状态'))->display(function ($status){
if($status == 1){
return '显示';
}else{
return '隐藏';
}
});
$grid->column('created_at', __('生成时间'));
$grid->column('status', __('状态'));
$grid->column('sort', __('排序'));
$grid->column('img', __('图片'));
$grid->column('introduce', __('介绍'));
// $grid->column('types', __('Types'));
$grid->column('updated_at', __('跟新时间'));
$grid->filter(function ($filter) {
// 设置created_at字段的范围查询 字段类型 timestamp 使用
// $filter->between('created_at', 'Created Time')->datetime();
// 我用的是 int类型 所以需要自定义一个过滤器TimestampBetween
$filter->use (new Grid\Filter\TimestampBetween('created_at', '生成时间'))->datetime();
});
// 禁用创建按钮
// $grid->disableCreateButton();
// 禁用分页条
// $grid->disablePagination();
// 禁用查询过滤器
// $grid->disableFilter();
// 禁用导出数据按钮
// $grid->disableExport();
// 禁用行选择checkbox
// $grid->disableRowSelector();
// 禁用行操作列
// $grid->disableActions();
// 默认为每页20条
// $grid->paginate(15);
$grid->perPages([10, 20, 30, 40, 50]);
return $grid;
}
public function edit($id,Content $content){
return $content->header('')
->description('')
->body($this->form()->edit($id));
}
/**
* Make a show builder.
*
* @param mixed $id
* @return Show
*/
protected function detail($id)
{
$show = new Show(Article::findOrFail($id));
$show->field('id', __('Id'));
$show->field('category', __('文章分类'));
$show->field('title', __('标题'));
$show->field('content', __('内容'));
$show->field('created_at', __('生成时间'));
$show->field('status', __('状态'));
$show->field('sort', __('排序'));
$show->field('img', __('图片'));
$show->field('introduce', __('介绍'));
// $show->field('types', __('Types'));
$show->field('updated_at', __('跟新时间'));
return $show;
}
/**
* Make a form builder.
*
* @return Form
* @manual https://laravel-admin.org/docs/zh/model-form-validation
* @course https://learnku.com/courses/laravel-package/2019/quickly-build-management-background-encorelaravel-admin/2356
*/
protected function form()
{
$form = new Form(new Article());
$form->switch('category', __('文章分类'));
$form->text('title', __('标题'))
->placeholder('请输入标题内容')//输入提示
->rules('required|min:2', [
'min' => '标题不能少于2个字符',
'required' => '标题不能为空',
])//验证提示
;
$form->textarea('content', __('内容'));
$form->switch('status', __('状态'))->default(1);
$form->number('sort', __('排序'));
$form->image('img', __('图片'));
$form->text('introduce', __('介绍'));
// $form->switch('types', __('Types'));
return $form;
}
}