71 lines
1.9 KiB
PHP
71 lines
1.9 KiB
PHP
<?php
|
|
namespace Modules\SystemTool\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
|
|
|
/**
|
|
* 字典类型模型
|
|
*/
|
|
class SysDictModel extends Model
|
|
{
|
|
protected $table = 'sys_dict';
|
|
|
|
protected $fillable = [
|
|
'name',
|
|
'code',
|
|
'describe',
|
|
'status',
|
|
'sort',
|
|
];
|
|
|
|
protected $casts = [
|
|
'status' => 'integer',
|
|
'sort' => 'integer',
|
|
'created_at' => 'datetime',
|
|
'updated_at' => 'datetime'
|
|
];
|
|
|
|
/**
|
|
* 关联字典子项
|
|
*/
|
|
public function dictItems(): HasMany
|
|
{
|
|
return $this->hasMany(SysDictItemModel::class, 'dict_id', 'id')
|
|
->orderBy('sort')
|
|
->orderBy('id');
|
|
}
|
|
|
|
/**
|
|
* 获取所有字典及其子项
|
|
* @return array
|
|
*/
|
|
public static function getAllDictWithItems(): array
|
|
{
|
|
return static::with('dictItems')
|
|
->where('status', 0)
|
|
->orderBy('sort')
|
|
->orderBy('id')
|
|
->get()
|
|
->map(function ($dict) {
|
|
return [
|
|
'id' => $dict->id,
|
|
'name' => $dict->name,
|
|
'code' => $dict->code,
|
|
'describe' => $dict->describe,
|
|
'status' => $dict->status,
|
|
'sort' => $dict->sort,
|
|
'dict_items' => $dict->dictItems->filter(fn($item) => $item->status === 0)->map(function ($item) {
|
|
return [
|
|
'id' => $item->id,
|
|
'label' => $item->label,
|
|
'value' => $item->value,
|
|
'color' => $item->color,
|
|
'sort' => $item->sort,
|
|
];
|
|
})->values()->toArray(),
|
|
];
|
|
})->toArray();
|
|
}
|
|
}
|