moirei / laravel-model-data
轻松处理Eloquent模型中的数据字段
1.2.0
2021-06-30 13:23 UTC
Requires
- php: ^7.2|^8.0
- illuminate/database: ^5.6|^6.0|^7.0|^8.0
- illuminate/support: ^5.6|^6.0|^7.0|^8.0
Requires (Dev)
- larapack/dd: ^1.0
- orchestra/testbench: ^3.6
- phpunit/phpunit: ^8.0|^9.3
README
此包允许您访问模型中的属性字段或使用数据字段而无需更改迁移。
特性
- 在不定义新列的情况下,在Eloquent模型上使用额外数据
- 轻松与模型上的多个自定义字段交互作为数据字段
- 使用
HasData特性将任何数据收集并保存到任何模型中
安装与设置
您可以通过composer安装此包;
composer require moirei/laravel-model-data
将MOIREI\ModelData\HasData特性添加到您的模型中;
use MOIREI\ModelData\HasData; class YourModel extends Model { use HasData; ... }
使用此包的模型
如果使用模型中的预定义属性/列,则为可选。
使用以下命令发布迁移;
php artisan vendor:publish --tag="model-data-migrations"
运行迁移命令以创建必要的表;
php artisan migrate
模式1:在模型外部持久化数据
如果$model_data属性为假,则为默认模式。
模式2:在模型中持久化数据
在迁移中定义数据列(s);
Schema::create('products', function (Blueprint $table) { $table->modelData('data'); // OR $table->json('data')->nullable(); // OR $table->text('data')->nullable(); });
然后在模型中定义一个model_data变量。这是存储列(s)的名称。
... /** * ModelData: use model's column * * @var string|array|false */ protected $model_data = 'data'; class YourModel extends Model { use HasData; ... }
用法
访问数据
以下使用data(在模式1中或在$model_data的值为"data"时);
基本访问
$model->data->name = 'value'; $model->data->name; // Returns 'value'
作为数组访问
$model->data['name'] = 'value'; $model->data['name']; // Returns 'value'
作为函数调用。
$model->data('name', 'value'); $model->data('name'); // Returns 'value' $model->data('moirei.tech', 'awesome'); $model->data('moirei.tech'); // Returns 'awesome'
可以使用数组重写所有现有数据;
// All existing data will be replaced $model->data = ['name' => 'value']; $model->data->all(); // Returns ['name' => 'value']
使用get和set;
$model->data = [ 'moirei' => ['tech' => 'awesome'], 'mg001' => ['resource' => 'white'], ]; // or $model->data->set([ 'moirei' => ['tech' => 'awesome'], 'mg001' => ['resource' => 'white'], ]); // or $model = $model->data([ 'moirei' => ['tech' => 'awesome'], 'mg001' => ['resource' => 'white'], ]); $model->data->set('mg001.name', 'Wireless Power Bank'); $model->data->get('mg001.name'); // Returns 'Wireless Power Bank'
get带有默认值
$model->data->get('undefined-attribute', 'default'); // Returns 'default'
多个/自定义数据字段(模式2)
上述示例使用data字段,它是外部模式默认字段。要允许使用自定义名称进行多个访问,
... /** * ModelData: use model's column * * @var string|array|false */ // protected $model_data = 'settings'; protected $model_data = [ 'settings', 'meta', ]; ...
使用以下方式访问
// set values $model->settings->set([]); $model->meta->set([]); // get values dump($model->settings()); dump($model->meta());
持久化数据
$model->save(); // or $model->data->save();
使用以下方式修改并保存到不同的模型中
$model->data->filter()->save($model_2, $key = 'data');
集合
此包提供了全局的集合函数pinch和save。
这意味着您可以将任何数据收集并保存到任何具有HasData特性的模型中;
$data = collect([ 'first_name' => 'James', 'last_name' => 'Franco' ])->save($model, $key = 'data');
pinch函数允许您使用点符号访问集合的底层数组。
key选项默认为data。
鸣谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。