vinhnguyen/eloquent-meta

将元数据附加到 Eloquent 模型

v1.8.2 2019-02-27 17:46 UTC

README

Latest Version Software License Build Status Total Downloads

将元数据附加到 LaravelEloquent 模型

  • 可选地为每个模型创建一个单独的表
  • 与或不与 Laravel 一起使用
  • 包含 Laravel 迁移或模式说明
  • 获取元数据或回退
哪个版本?
  • 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.67+。

如果您使用 EloquentMeta 和 Eloquent 而不使用 Laravel,您还必须根据其 文档 中的说明设置 Eloquent。

如果您 使用 Laravel,那么您可能想要包含将注册命令等的 ServiceProvider。更新 config/app.php 以在 providers 数组中包含此包的 ServiceProvider。

'providers' => [
    'Phoenix\EloquentMeta\ServiceProvider'
]

表结构

如果您使用 Laravel,运行迁移 php artisan vendor:publishphp 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,则将 ServiceProvider 包含在您的 config/app.php 中

'providers' => [
    'Phoenix\EloquentMeta\ServiceProvider'
]

然后运行 php artisan generate:metatable table_name 以创建迁移并运行 php artisan migrate 以构建表。

贡献

有关更多信息以及测试,请参阅 [CONTRIBUTING.md]。

感谢和致谢

贡献者

感谢 Boris GlumplerScubaClick 提供的原始包!