thescopogroup / eloquent-meta
将元数据附加到 Eloquent 模型
Requires
- php: >=5.6.4
- illuminate/database: 5.4.*|5.5.*|5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0
Requires (Dev)
- phpunit/phpunit: 4.4.*
README
将元数据附加到 Laravel 的 Eloquent 模型。
- 可选地为每个模型创建一个独立的表
- 与或不与 Laravel 一起使用
- 包含 Laravel 迁移或模式说明
- 获取元数据或回退
哪个版本?
- Laravel 5.7 - 使用
1.9.*
- Laravel 5.6 - 使用
1.8.*
- Laravel 5.5 - 使用
1.7.*
- Laravel 5.4 - 使用
1.6.*
- Laravel 5.3 - 使用
1.5.*
- 低于 5.3 - 技术上不支持,但应与
.1.3
兼容 - Laravel 4 - 也不支持,但应与
1.2
兼容
稳定版本:1.4.* 与 Laravel 5.* 或独立使用兼容。自动拉取 Eloquent。
要用于 Laravel 4,请查看版本 1.2.*
安装
通过 Composer 安装。
"require": { "phoenix/eloquent-meta": "1.6.*" }
请注意,仅支持 php 5.6
和 7
+。
如果您正在使用 EloquentMeta 和 Eloquent 而不使用 Laravel,您还必须按照其 文档 中的说明设置 Eloquent。
如果您 正在使用 Laravel,则应包含将注册命令等的服务提供者。更新 config/app.php
以在提供者数组中包含此包的服务提供者引用。
'providers' => [ 'Phoenix\EloquentMeta\ServiceProvider' ]
表结构
如果您正在使用 Laravel,请运行迁移 php artisan vendor:publish
和 php artisan migrate
以创建数据库表。
如果您 没有使用 Laravel,则必须手动创建表。
CREATE TABLE meta ( id INTEGER PRIMARY KEY NOT NULL, metable_id INTEGER NOT NULL, metable_type TEXT NOT NULL, key TEXT NOT NULL, value TEXT NOT NULL ); CREATE UNIQUE INDEX meta_key_index ON meta (key); CREATE UNIQUE INDEX meta_metable_id_index ON meta (metable_id);
使用方法
将特性添加到您希望附加元数据的所有模型中
use Illuminate\Database\Eloquent\Model; use Phoenix\EloquentMeta\MetaTrait; class SomeModel extends Model { use MetaTrait; // model methods }
然后使用如下
$model = SomeModel::find(1); $model->getAllMeta(); $model->getMeta('some_key', 'optional default value'); // default value only returned if no meta found. $model->updateMeta('some_key', 'New Value'); $model->deleteMeta('some_key'); $model->deleteAllMeta(); $model->addMeta('new_key', ['First Value']); $model->appendMeta('new_key', 'Second Value');
唯一的元数据模型和表
您还可以为特定元数据类型定义一个特定的元数据模型。例如,您的 User 模型可以使用 UserMeta 模型,具有自定义方法和所有功能。使用上述示例
use Illuminate\Database\Eloquent\Model; use Phoenix\EloquentMeta\MetaTrait; class SomeModel extends Model { use MetaTrait; protected $meta_model = 'Fully\Namespaced\SomeModelMeta'; // model methods }
然后在 SomeModelMeta 中简单扩展 Phoenix\EloquentMeta\Meta。现在您可以为元数据模型添加自定义方法。您还可以通过添加以下内容来指定元数据保存到的表:
protected $table = "whatever_table";
如果您在没有 Laravel 的情况下使用 EloquentMeta,则必须手动创建数据库表。
如果您正在使用 Laravel,则在 config/app.php 中包含服务提供者
'providers' => [ 'Phoenix\EloquentMeta\ServiceProvider' ]
然后运行 php artisan generate:metatable table_name
以创建迁移并运行 php artisan migrate
以构建表。
贡献
有关更多信息以及测试,请参阅 [CONTRIBUTING.md]。
感谢和致谢
贡献者
- Michael Wilson - @chrismichaels84 - 维护者
- Paweł Ciesielski - @dzafel
- Lukas Knuth - @LukasKnuth
- @stephandesouza
非常感谢 Boris Glumpler 和 ScubaClick 提供的原始包!