czim/laravel-listify

将任何模型转换为列表。流行的 Lookitsatravis Listify 包的重建。

2.0.3 2019-10-29 14:34 UTC

This package is auto-updated.

Last update: 2024-08-29 03:47:39 UTC


README

Latest Version on Packagist Software License Build Status Latest Stable Version SensioLabsInsight

这是出于个人原因对 Lookitsatravis 的 Listify 进行从头重建。它使用与 Listify 相同的接口,因此从那个切换到这个包不会破坏任何东西。

版本兼容性

变更日志

查看变更日志.

为什么?

Listify 很 ,但有一些不足之处

  • 一个非常小的不足是代码规范,我认为它需要做一些认真的清理。
  • 更令人烦恼的是对 private 方法属性的重度依赖,这使得无法使用灵活的继承方法与 Listify 一起使用。
  • 在功能上,Listify 不适合可变作用域。属于作用域太受限(没有可空的远程键列),任何基于字符串的作用域都是不可变的。为了我的目的,我需要一个可调用的作用域,它能很好地处理作用域的交换,并将 null 作用域视为从列表中删除项目。

安装

通过 Composer

$ composer require czim/laravel-listify

用法

对于一般功能,原始 Listify 接口在很大程度上是相同的。有关参考,请参阅 原始文档

一些例外情况适用

  • 现在您可以使用可调用的作用域,它可能返回用于(原始)where 子句的任何字符串。对 Listify 字符串作用域的原始限制仍然适用。但是,现在 null 是一个可接受的作用域,它将保持或从任何列表中删除记录(其 position 将保持为 NULL)。
  • 现在您可以为 BelongsTo 作用域使用可空的远程键。没有相关远程键的记录不会添加到列表中。

虽然这不是必需的,但您可以为使用该特质的模型实现 ListifyInterface 以满足您的需求。

与原始 Listify 的区别

没有提供 attach artisan 命令;您需要自己处理 position 列的迁移。

抛出的异常已经简化。现在抛出 InvalidArgumentExceptionUnexpectedValueExceptionBadMethodCallException 而不是自定义异常。不再为 'null 作用域' 或 'null 外键' 抛出异常,因为这些现在是预期和允许的。现在,具有有效 'null 作用域' 的模型将默默地被排除在列表之外。

请注意,此包已与原始 listify PHPUnit 测试进行测试,并在未有意改变行为的地方通过测试。

最后,此特质可以使用继承使用(因为其基本作用域是 protected 而不是 private)。您可以创建一个 'BaseListifyModel' 并扩展它以避免代码(或设置)重复。

处理全局作用域

当在列表化的模型上使用全局作用域时,这可能会破坏预期的功能,尤其是在全局作用域影响记录排序的情况下。为了处理这种情况,listify 将检查一个方法来根据需要清理作用域。要使用此方法,只需将以下方法的实现添加到您的列表化模型类中

    /**
     * @param \Illuminate\Database\Eloquent\Builder $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function cleanListifyScopedQuery($query)
    {
        // Return the query builder after applying the necessary cleanup
        // operations on it. In this example, a global scope ordering the
        // records by their position column is disabled by using unordered()
        return $query->unordered();
    }

此方法将在 listify 需要访问(及其自己的排序)对模型进行检查和操作时调用。

待办事项

  • 字符串(和 QueryBuilder)作用域的工作方式有些奇怪。超出作用域的新记录将带有位置值添加。这些记录被报告为处于列表中,并且在操作它们时可能会发生奇怪的事情。

贡献

请参阅CONTRIBUTING获取详细信息。

致谢

显然,与Listify相关的大部分贡献归功于

许可证

MIT许可证(MIT)。请参阅许可证文件获取更多信息。