- 分类表定义如下:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
id | unsigned int primary key | 自增主键 |
pid | unsigned int | 父级分类ID |
cate_name | varchar(30) | 分类名称 |
一个分类只能有一个父级,对应操作使用hasOne, 一个分类可以有多个子分类,对应操作使用hasMany即可, 使用get_class方法来获取类名。
代码如下:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class CategoriesModel extends Model
{
protected $table = 'categories';
protected $fillable = ['pid', 'cate_name', 'sort'];
protected $with = [
'parent'
];
// 该分类下的品牌
public function brand()
{
return $this->hasMany(BrandModel::class, 'cate_id', $this->getKeyName());
}
/**
* 该分类的子分类
*/
public function child()
{
return $this->hasMany(get_class($this), 'pid', $this->getKeyName());
}
/**
* 该分类的父分类
*/
public function parent()
{
return $this->hasOne(get_class($this), $this->getKeyName(), 'pid');
}
}
- 使用示例:
protected function grid()
{
$grid = new Grid(new CategoriesModel());
$grid->column('id', __('Id'));
$grid->column('cate_name', __('Category Name'));
$grid->column('parent.cate_name', __('Parent Category'));
$grid->column('created_at', __('Created at'));
$grid->column('updated_at', __('Updated at'));
return $grid;
}