phoenix/eloquent-meta

将元数据附加到 Eloquent 模型

v1.9.0 2019-02-03 16:26 UTC

README

该包可能已被放弃。它可能无法与新版本的 Laravel 兼容。我已经转向使用 Laravel 和 PHP。所有提交的 PR 都将被接受。如果您想拥有这个仓库,请创建一个 issue 并与我联系。

Phoenix Eloquent Meta

Latest Version Software License Build Status Total Downloads

将元数据附加到 LaravelEloquent 模型

  • 可选地为每个模型创建单独的表
  • 与或不使用 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.67+。

如果您使用 EloquentMeta 和 Eloquent 而不使用 Laravel,您还必须根据其 文档 详细设置 Eloquent。

如果您 使用 Laravel,则希望包含将注册命令等的 ServiceProvider。更新 config/app.php 以将此包的 ServiceProvider 包含在 providers 数组中。

'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,则在 config/app.php 中包含 ServiceProvider

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

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

贡献

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

感谢和致谢

贡献者

非常感谢Boris GlumplerScubaClick提供的原始包!