a1dbox / laravel-model-accessor-builder
您可以在模型访问器上构建查询。通过访问器进行排序或筛选,同时它也是一个常规的模型访问器
v1.0.3
2022-08-17 21:24 UTC
Requires
- php: ^7.4|^8.0
- ext-json: *
- ext-pdo: *
- illuminate/database: >=8
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- orchestra/testbench: ^6.24
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- phpunit/phpunit: ^9.5
README
您可以在模型访问器上构建查询。通过访问器进行排序或筛选,同时它也是一个常规的可用访问器
安装
您可以通过composer安装此包
composer require a1dbox/laravel-model-accessor-builder
用法
在您的模型中使用HasAccessorBuilder
特质来提供访问器构建器的工作
use A1DBox\Laravel\ModelAccessorBuilder\Concerns\HasAccessorBuilder; class User extends Model { use HasAccessorBuilder; }
为属性创建访问器
Laravel 8.x 访问器定义风格
class User extends Model { use HasAccessorBuilder; public function getFullNameAttribute() { return AccessorBuilder::make( fn (AccessorBuilder\BlueprintCabinet $cabinet) => $cabinet->trim( $cabinet->concat( $cabinet->col('name'), $cabinet->str(' '), $cabinet->col('last_name'), ) ), ); } }
例如,上面的代码在解析访问器值时将执行与以下相同的操作
return trim($this->name . ' ' . $this->last_name);
示例 #1
在这里,模型$attributes
中包含的full_name
属性在查询后,当使用访问器->full_name
时,值将来自$attributes
$user = User::query() ->withAccessor('full_name') ->find(1); echo $user->full_name; //John Doe
执行的SQL查询
SELECT *, trim(concat(name, ' ', last_name)) AS full_name FROM users WHERE id = 1
示例 #2
在这里,full_name
属性不在模型的$attributes
变量中,当使用访问器$user->full_name
时,值将从模型$attributes
构建
$user = User::find(1); echo $user->full_name; //John Doe
执行的SQL查询
SELECT * FROM users WHERE id = 1
示例 #3
按full_name
对所有用户进行排序
$users = User::query() ->withAccessor('full_name') ->orderBy('full_name') ->get();
示例 #4
通过full_name
筛选用户
$users = User::query() ->withAccessor('full_name') ->where('full_name', 'John Doe') ->get();
您可以将数组传递给withAccessor
方法
$users = User::query() ->withAccessor(['full_name', 'full_address']) ->get();
测试
composer test
更新日志
请参阅更新日志以获取有关最近更改的更多信息。
贡献
请参阅贡献指南以获取详细信息。
安全漏洞
请审查我们的安全策略以了解如何报告安全漏洞。
致谢
许可
MIT许可证(MIT)。请参阅许可文件以获取更多信息。