kevslashnull/futuristic-eloquent-builder

该软件包已被废弃,不再维护。作者建议使用 codingpaws/laravel-findby 软件包。

在 Laravel Eloquent 查询中使用 PHP8 命名参数

1.3 2021-04-26 13:16 UTC

This package is auto-updated.

Last update: 2021-06-14 23:18:54 UTC


README

未来主义 Eloquent 构建器允许您在 Laravel 的 Eloquent 查询中使用现代 PHP 8.0 的 命名参数,类似于 Ruby 的 Active Record findBy

class User extends Model
{
    use KevSlashNull\FuturisticEloquentBuilder\NamedParameterQuery;
}

User::findBy(
    first_name: 'Jane',
    role_id: 5,
    is_admin: false,
)->get();

方法

Book::findByNot(
    genre: 'SciFi',
    genre: 'Adventure', // allowed!
    legth: 'long',
)->findBy(genre: 'Drama', author: 'Dürrenmatt')->get();

此项目仍处于早期阶段。该 技术解决方案 建立在 Laravel 现有的查询构建器之上。在添加新功能的同时,我们需要确保现有功能正常工作。

安装

composer require kevslashnull/futuristic-eloquent-builder

未来主义 Eloquent 构建器是按模型选择的。要为特定模型执行具有命名参数的查询,请在该模型的类中使用特质(use NamedParameterQuery)。

支持的方法

您可以在您的模型上使用这些方法(例如 Book::findBy)以及该模型的构建器上(例如 Book::where('id', 3)->findBy)。

  • findBy,类似于本地的 where
  • findByNot,类似于本地的 where 但相反(使用 != 而不是 =
  • orFindBy,类似于本地的 orWhere
  • orFindByNot,类似于本地的 orWhere 但相反(使用 != 而不是 =

技术背景

大部分的魔法发生在 NamedBuilder 类中。它通过 findByfindByNot 方法扩展了 Eloquent 的 Builder 类。通过覆盖 where 方法并始终返回一个 NamedBuilder 实例来实现 wherefindBy 的链式操作。

库的 1.0 版本允许在 where 查询中使用命名参数,但结果证明这是不可能的。

实际上,

User::findBy(first_name: 'John', last_name: 'Doe', gender: 'male');

翻译为

User::where('first_name', 'John')->where('last_name', 'Doe'->where('gender', 'male');

每个人都可以贡献

该项目采用 MIT 许可。每个人都可以贡献。❤️