zschuessler / model-json-attribute-guard-laravel
为您的json列提供一致性的直观且有趣的方式
1.0.1
2020-08-27 19:38 UTC
Requires
- php: >=7.2
Requires (Dev)
- illuminate/database: ^5.0|^6.0|^7.0
- orchestra/database: 3.5.*|3.6.*|3.7.*|3.8.*
- orchestra/testbench: 3.5.*|3.6.*|3.7.*|3.8.*
- phpunit/phpunit: ^6.3|^7.0
This package is not auto-updated.
Last update: 2024-09-21 13:41:32 UTC
README
此包允许对JSON列进行验证和自定义类型转换。
您是否曾经尝试使用json列,并且
- 验证列的架构很困难或很混乱
- 查询列很费力
- 在保存模型时进行类型转换并不有趣
但现在您可以放心了!
示例
您想要保存用户偏好。这是一些高度动态的数据,所以您将其放入json列
以下是问题
- 您能强制每个键有效吗?
- 您能强制两个日期都是有效日期吗?
- 关于始终确保列是一个数组,无论是否存在偏好,怎么办?
我们可以。
步骤1:创建验证器类
让我们使用Laravel自己的验证器语法来描述我们想要的内容。
<?php
namespace App\Models\User;
use Zschuessler\ModelJsonAttributeGuard\JsonAttributeGuard;
class PreferencesJsonColumn extends JsonAttributeGuard
{
public function schema() : array
{
return [
// Use wildcard syntax to apply rules to all children
'*.name' => 'required',
'*.value' => 'required|min:3',
'*.date_created' => 'present|nullable|date',
'*.date_updated' => 'present|nullable|date',
];
}
}
底层使用Laravel的验证器:您可以使用任何规则。尽情使用吧。
步骤2:向您的模型添加特性并进行类型转换
让我们告诉Laravel我们想要我们的模型执行自定义类型转换
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Models\User\PreferencesJsonColumn;
use Zschuessler\ModelJsonAttributeGuard\Traits\HasJsonAttributeGuards;
class User extends Model
{
use HasJsonAttributeGuards;
public $casts = [
'preferences' => PreferencesJsonColumn::class
];
步骤3:成功
这段代码将表现得非常好
$user->preferences = [
[
'name' => 'Favorite Band',
'value' => 'Slenderbodies',
'date_created' => '2019-09-15',
'date_updated' => '2020-01-01'
]
];
$user->save();
太好了!但是下面的代码将抛出JsonAttributeValidationFailedException异常——哦不!您的模型将无法保存。
$user->preferences = [
'name' => null,
'value' => null,
'date_created' => null,
'date_updated' => null,
];
$user->save();
这是一个简单的示例。可能性是无限的!