kevslashnull / futuristic-eloquent-builder
1.3
2021-04-26 13:16 UTC
Requires
- illuminate/database: ^8.38
- illuminate/support: ^8.38
Requires (Dev)
- orchestra/testbench: ^6.17
- phpunit/phpunit: ^9.5
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,类似于本地的wherefindByNot,类似于本地的where但相反(使用!=而不是=)orFindBy,类似于本地的orWhereorFindByNot,类似于本地的orWhere但相反(使用!=而不是=)
技术背景
大部分的魔法发生在 NamedBuilder 类中。它通过 findBy 和 findByNot 方法扩展了 Eloquent 的 Builder 类。通过覆盖 where 方法并始终返回一个 NamedBuilder 实例来实现 where 和 findBy 的链式操作。
库的 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 许可。每个人都可以贡献。❤️