a1dbox/laravel-model-accessor-builder

您可以在模型访问器上构建查询。通过访问器进行排序或筛选,同时它也是一个常规的模型访问器

v1.0.3 2022-08-17 21:24 UTC

This package is auto-updated.

Last update: 2024-09-18 02:13:49 UTC


README

Latest Version on Packagist Total Downloads

您可以在模型访问器上构建查询。通过访问器进行排序或筛选,同时它也是一个常规的可用访问器

安装

您可以通过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)。请参阅许可文件以获取更多信息。