moirei/laravel-model-data

轻松处理Eloquent模型中的数据字段

1.2.0 2021-06-30 13:23 UTC

This package is auto-updated.

Last update: 2024-08-29 05:30:46 UTC


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']

使用getset

$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');

集合

此包提供了全局的集合函数pinchsave

这意味着您可以将任何数据收集并保存到任何具有HasData特性的模型中;

$data = collect([
    'first_name' => 'James',
    'last_name' => 'Franco'
])->save($model, $key = 'data');

pinch函数允许您使用点符号访问集合的底层数组。

key选项默认为data

鸣谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件