znck/plug

Laravel Eloquent 的插件

v0.1.9 2016-09-27 14:50 UTC

This package is not auto-updated.

Last update: 2024-09-26 00:14:36 UTC


README

一组可插拔的 Eloquent 特性,用于增强您的模型。

Plug

StyleCI Status Build Status Coverage Status Software License Packagist Latest Version Issues

安装

需要 PHP 7.0+。

要获取 Plug 的最新版本,只需使用 Composer 引入项目即可

$ composer require znck/plug

当然,您也可以手动更新 require 块并运行 composer update,如果需要的话

{
    "require": {
        "znck/plug": "^0.1"
    }
}

一旦安装了 Plug,您就可以使用 plug[gable] 特性。

用法

Plug 的所有功能都作为特性提供,因此您可以直接将它们放入模型类中。特性将自动启动。无需配置。

<?php namespace App;

use Illuminate\Database\Eloquent\Model;
use Znck\Plug\Eloquent\Traits\BelongsToThrough;

class User extends Model {
  use BelongsToThrough;
}

最佳实践是创建一个抽象模型类并使用所需的插件(特性)。

<?php namespace App;

use Illuminate\Database\Eloquent\Model;
use Znck\Plug\Eloquent\Traits\BelongsToThrough;
use Znck\Plug\Eloquent\Traits\FixBelongsTo;
use Znck\Plug\Eloquent\Traits\FixMorphTo;
use Znck\Plug\Eloquent\Traits\UuidKey;
use Znck\Plug\Eloquent\Traits\FixForeignKey;
use Znck\Plug\Eloquent\Traits\SelfDecorating;
use Znck\Plug\Eloquent\Traits\SelfValidating;

abstract class UUIDBaseModel extends Model
{
    use FixBelongsTo, FixMorphTo, BelongsToThrough, UuidKey, SelfValidating, SelfDecorating, FixForeignKey;

    public $incrementing = true; // Explained below.
}

特性

  1. BelongsToThrough
    Eloquent 中缺少 HasManyThrough 关系的逆关系。此插件(特性)提供了 belongsToThrough 关系。在底层,它使用 [znck/belongs-to-through] 包中的 BelongsToThrough

  2. FixBelongsTo
    为了保持 belongsTo 关系的预期行为,Eloquent 引入了一个错误。如果模型具有非自增主键(例如:UUID)并且 belongsTo 关系值为 null,那么如果它是预加载的,它将因 SQL 错误而崩溃。 问题 12051

  3. FixForeignKey
    Eloquent 在猜测外键字段名称时具有误导性的行为。它将模型类的单数小写名称作为基础,并追加 _id,这非常反直觉。预期行为是从表名称中猜测外键字段名称。 问题 10724

  4. FixMorphTo
    关系类 MorphTo 继承自 BelongsTo,因此它容易受到相同的错误的影响。

  5. SelfDecorating @已弃用
    它使数据库条目保持干净。例如:name 列的值应以大写字母开头。

  6. SelfValidating @已弃用,改用 znck/repository
    它在保存或更新之前验证属性,因此只有有效数据才会进入数据库。

  7. UuidKey
    它允许使用非自增的 UUID 主键。

class User extends Model {
  use UuidKey;
  // Make sure to set $incrementing to false.
  public $incrementing = false;
}

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

测试

$ composer test

贡献

有关详细信息,请参阅 CONTRIBUTINGCONDUCT

安全性

如果您发现任何与安全相关的问题,请通过:author_email 发送电子邮件,而不是使用问题跟踪器。

鸣谢

许可协议

MIT 许可协议(MIT)。有关更多信息,请参阅 许可文件