一个Laravel包,可以扩展任何模型以添加元字段。

1.0.3 2018-01-14 11:41 UTC

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

进一步开发

我将寻求扩展功能,包括更好的值查找,并可能尝试包括点表示法以支持数组。