开发者仓库 / meta
一个Laravel包,可以扩展任何模型以添加元字段。
1.0.3
2018-01-14 11:41 UTC
Requires
- php: >=7.0
- laravel/framework: >=5.5
This package is not auto-updated.
Last update: 2024-09-23 07:58:29 UTC
README
如果你经常更新迁移脚本,为你的模型添加列变化。你可能发现添加一个形态关系来存储所有这些元数据是一个好主意。
安装
composer require developerswarehouse/meta
工作原理
这里的理念是在模型表(例如:用户)中只存储必要的数据:姓名、电子邮件、密码。对于额外的数据,你应该将这些数据存储在 Meta
表中,作为可选属性,例如:性别、身高、国籍。
用法
在你的Laravel模型上,添加元特质的特性。
use DevelopersWarehouse\Meta;
class User extends Authenticatable
{
use Meta;
}
要填充模型的元数据,使用Eloquent方法来更新一对一关系
示例HTML表单
<form action="" method="POST">
{{ csrf_field() }}
<input type="text" name="meta[height]" />
<input type="text" name="meta[telephone]" />
<input type="radio" name="meta[gender]" value="male" />
<input type="radio" name="meta[gender]" value="female" />
<button>Save</button>
</form>
控制器方法
public function update(Request $request, User $user) {
if ($request->has("meta.*")) {
foreach($request->input("meta.*") as $key => $value) {
if ($value) {
$user->meta()->updateOrCreate(['key' => $key],['value' => $value]);
} else {
$user->meta()->where("key", $key)->delete();
}
}
}
}
要显示模型的元属性,你可以使用关系属性 meta
。
$user->meta;
// if you knwo the meta key, say height
$user->metaValueByKey('height'); // returns collection()
// or if you know the meta key
$user->metaHeight; // 5'10
$user->metaGender; // female
$user->metaSomething; // null
进一步开发
我将寻求扩展功能,包括更好的值查找,并可能尝试包括点表示法以支持数组。