# 建表
## 文章表
### 建表語句
~~~SQL
DROP TABLE IF EXISTS `articles`;
CREATE TABLE `articles`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`category_id` mediumint(8) UNSIGNED NOT NULL DEFAULT 0 COMMENT '分類ID',
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '標題',
`keywords` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '關鍵詞',
`abstract` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '摘要',
`content` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '內容',
`sort` int(11) NOT NULL DEFAULT 0 COMMENT '排序',
`cover_map` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '封面圖',
`is_footer` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否頁腳顯示 0-否 1-是',
`created_at` timestamp NULL DEFAULT NULL COMMENT '添加時間',
`updated_at` timestamp NULL DEFAULT NULL COMMENT '修改時間',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB
AUTO_INCREMENT = 1992
CHARACTER SET = utf8
COLLATE = utf8_general_ci COMMENT = '文章表'
ROW_FORMAT = DYNAMIC;
~~~
### 代碼生成
找到后臺:`開發工具` -> `代碼生成器` 選擇 `articles` 表生成代碼
系統會自動生成該表對應的增刪改查
添加路由: `app\Admin\routes.php`
~~~php
...
Route::group([
...
], function (Router $router) {
...
$router->resource('/articles', 'ArticleController');
});
~~~
### 創建菜單
創建`文章`菜單的二級菜單`文章` 路徑填寫 `/articles`
### 修改表單代碼
`app\Admin\Controllers\ArticleController.php`
~~~php
use App\Models\ArticleCategory;
protected function form()
{
return Form::make(new Article(), function (Form $form) {
$articleCategoryModel = new ArticleCategory();
$form->display('id');
$form->select('category_id', '分類')
->options($articleCategoryModel->selectOptions())
->saving(function ($v) {
return (int)$v;
})
->required();
$form->text('title')
->rules('required')
->required();
$form->text('keywords')
->rules('required')
->required();
$form->text('abstract')
->rules('required')
->required();
$form->editor('content')
->rules('required')
->required();
$form->image('cover_map')
->autoUpload()
->removable(false)
->move('/article/' . date('Ymd'))
->uniqueName()
->saving(function ($v) {
return (string)$v;
});
$form->number('sort');
$form->switch('is_footer', '是否頁腳顯示')
->default(1);
$form->display('created_at');
$form->display('updated_at');
});
}
~~~
> 本次項目用不到封面圖 但是一般文章發布都會有
> 表單開關一般使用 `switch`
### 修改列表代碼
`app\Admin\Controllers\ArticleController.php`
~~~php
protected function grid()
{
return Grid::make(new Article(['category']), function (Grid $grid) {
$grid->column('id')
->sortable();
$grid->column('category.title','分類');
$grid->column('title');
$grid->column('keywords');
$grid->column('abstract');
$grid->column('sort');
$grid->column('cover_map')->image('',100,150);
$grid->column('is_footer','是否頁腳顯示')->switch();
$grid->column('created_at');
$grid->column('updated_at')
->sortable();
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
});
$grid->disableViewButton();
});
}
~~~
> 列表去掉查看按鈕的代碼是 `$grid->disableViewButton();`
### 添加文章的模型關聯
~~~php
public function category()
{
return $this->belongsTo(ArticleCategory::class, 'category_id', 'id');
}
~~~