PHPackages                             mradang/laravel-custom-field - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. mradang/laravel-custom-field

ActiveLibrary

mradang/laravel-custom-field
============================

laravel-custom-field

v6.6.0(1mo ago)0711MITPHP

Since Feb 11Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/mradang/laravel-custom-field)[ Packagist](https://packagist.org/packages/mradang/laravel-custom-field)[ RSS](/packages/mradang-laravel-custom-field/feed)WikiDiscussions master Synced 3d ago

READMEChangelog (10)Dependencies (6)Versions (30)Used By (0)

laravel custom field
====================

[](#laravel-custom-field)

为模型增加字段定制功能

安装
--

[](#安装)

```
composer require mradang/laravel-custom-field

```

添加的内容
-----

[](#添加的内容)

### 添加的数据表迁移

[](#添加的数据表迁移)

- custom\_field\_groups
- custom\_fields
- custom\_field\_values

定制字段功能
------

[](#定制字段功能)

### 控制器 Trait

[](#控制器-trait)

```
use mradang\LaravelCustomField\Traits\CustomFieldControllerTrait;
```

增加以下内容：

```
// 指定定制模型类（未重载该函数时，默认使用控制器同名模型）
customFieldModel()
// 获取基本字段
getBaseFields()
// 获取基本分组信息
getBaseGroups()
// 保存字段分组
saveFieldGroup(Request $request) // [id, name]
// 获取字段分组
getFieldGroups()
// 获取字段分组带字段
getFieldGroupsWithFields() // [ids]
// 删除字段分组
deleteFieldGroup(Request $request) // [id]
// 字段分组排序
sortFieldGroups(Request $request) // [{id, sort}]
// 保存字段
saveField(Request $request) // [id, name, type, options, group_id]
// 获取字段
getFields()
// 删除字段
deleteField(Request $request) // [id]
// 字段排序
sortFields(Request $request) // [{id, sort}]
// 字段移动
moveField(Request $request) // [id, group_id]
```

### 模型 Trait

[](#模型-trait)

```
use mradang\LaravelCustomField\Traits\CustomFieldTrait;
```

增加以下内容

```
// 模型基本字段定义
Model::customFieldBaseFields() // [field => label, ...]
// 模型基本分组信息
Model::customFieldBaseGroups() // [base => '基本组名', default => '默认组名']
// 定制字段名在所有组中唯一
Model::customFieldGloballyUnique(): bool // false
// 定制字段在指定组内唯一（默认是字段所在的组内唯一）
Model::customFieldUniqueWithinGroupIds($group_id): array // [$group_id]
// 获取字段分组
Model::customFieldGroups()
// 获取字段分组带字段
Model::customFieldGroupsWithFields($group_id)
// 创建字段分组
Model::customFieldGroupCreate($name)
// 确保字段分组存在
Model::customFieldGroupEnsureExists($name)
// 更新字段分组
Model::customFieldGroupUpdate($id, $name)
// 删除字段分组
Model::customFieldGroupDelete($id)
// 字段分组排序
Model::customFieldGroupSaveSort(array $data)
// 获取字段
Model::customFields()
// 按分组获取字段
Model::customFieldsByGroupId($id)
// 创建字段
Model::customFieldCreate($name, $type, array $options = [], $group_id = 0)
// 修改字段
Model::customFieldUpdate($id, $name, $type, array $options = [], $group_id = 0)
// 删除字段
Model::customFieldDelete($id)
// 字段排序
Model::customFieldSaveSort(array $data)
// 字段移动
Model::customFieldMove($id, $group_id)
// 清理全部定制字段值
Model::customFieldClearAllValues()
// 批量保存定制字段数据
Model::customFieldBatchSaveData(array $data)
// 保存定制字段数据
$model->customFieldSaveData(array $data)
// 保存单个定制字段数据
$model->customFieldSaveDataItem(int $field_id, $value)
// 获取单个定制字段数据
$model->customFieldGetDataItem(int $field_id)
// 取定制字段数据
array $model->customFieldData
// 清理字段值
$model->customFieldClearValues()
```

关联关系

- customFieldValues

### 根据需要增加路由

[](#根据需要增加路由)

```
Route::post('getBaseFields', 'XXXXController@getBaseFields');
Route::post('getBaseGroups', 'XXXXController@getBaseGroups');
Route::post('getFieldGroups', 'XXXXController@getFieldGroups');
Route::post('getFields', 'XXXXController@getFields');

Route::post('saveFieldGroup', 'XXXXController@saveFieldGroup');
Route::post('deleteFieldGroup', 'XXXXController@deleteFieldGroup');
Route::post('sortFieldGroups', 'XXXXController@sortFieldGroups');
Route::post('saveField', 'XXXXController@saveField');
Route::post('deleteField', 'XXXXController@deleteField');
Route::post('sortFields', 'XXXXController@sortFields');
Route::post('moveField', 'XXXXController@moveField');
```

### 模型删除时自动清理定制字段值

[](#模型删除时自动清理定制字段值)

```
protected static function boot()
{
    parent::boot();
    static::deleting(function ($model) {
        $model->customFieldClearValues();
    });
}
```

###  Health Score

48

—

FairBetter than 94% of packages

Maintenance90

Actively maintained with recent releases

Popularity14

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity67

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~79 days

Recently: every ~10 days

Total

29

Last Release

50d ago

Major Versions

v2.0.1 → v3.0.02020-05-18

v3.7.3 → v4.0.02021-01-18

v4.2.0 → v5.0.02023-05-20

v5.2.0 → v6.0.12026-02-12

### Community

Maintainers

![](https://www.gravatar.com/avatar/b19d9f12d42f3aa6dec88a2d59f8d2b452ee0c4bb7504ef5e9f06938df1e9d0b?d=identicon)[mradang](/maintainers/mradang)

---

Top Contributors

[![mradang](https://avatars.githubusercontent.com/u/1206671?v=4)](https://github.com/mradang "mradang (74 commits)")

###  Code Quality

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/mradang-laravel-custom-field/health.svg)

```
[![Health](https://phpackages.com/badges/mradang-laravel-custom-field/health.svg)](https://phpackages.com/packages/mradang-laravel-custom-field)
```

###  Alternatives

[anourvalar/eloquent-serialize

Laravel Query Builder (Eloquent) serialization

11320.2M21](/packages/anourvalar-eloquent-serialize)[namu/wirechat

A Laravel Livewire messaging app for teams with private chats and group conversations.

54324.5k](/packages/namu-wirechat)[statamic-rad-pack/runway

Eloquently manage your database models in Statamic.

135192.6k5](/packages/statamic-rad-pack-runway)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
