laracraft-tech/laravel-useful-traits

此包已被弃用,不再维护。作者建议使用 laracraft-tech/laravel-useful-additions 包。

一组有用的 Laravel 扩展!

v4.0.1 2024-07-08 09:23 UTC

This package is auto-updated.

Last update: 2024-07-15 10:47:28 UTC


README

Latest Version on Packagist Tests Check & fix styling License

在这里,我们将分享一些我们在日常工作中需要的有用的 Laravel 扩展。

特性

命令

安装

您可以通过 composer 安装此包。

composer require laracraft-tech/laravel-useful-additions

然后使用以下命令发布配置文件:

php artisan vendor:publish --tag="useful-additions-config"

特性

有用的枚举

此特性仅在安装了 PHP 8.1 或更高版本的系统上可用。

names, values, array

如果您喜欢遍历所有枚举类型,或者可能想将枚举用作数组,例如在迁移中,这将非常有用。

use LaracraftTech\LaravelUsefulAdditions\Traits\UsefulEnums;

enum PaymentType: int
{
    use UsefulEnums;

    case Pending = 1;
    case Failed = 2;
    case Success = 3;
}

PaymentType::names();   // return ['Pending', 'Failed', 'Success']
PaymentType::values();  // return [1, 2, 3]
PaymentType::array();   // return ['Pending' => 1, 'Failed' => 2, 'Success' => 3]

有用的作用域

selectAllBut

选择所有列,除了指定的排除数组。

use LaracraftTech\LaravelUsefulAdditions\Traits\UsefulScopes;

$class = new class extends Model
{
    use UsefulScopes;

    protected $timestamps = false;
    protected $table = 'scope_tests';
};

$class->create([
    'foo' => 'foo',
    'bar' => 'bar',
    'quz' => 'quz',
]);

$class::query()->selectAllBut(['foo'])->first()->toArray();
// return ['bar' => 'bar', 'quz' => 'quz']

注意:由于您不能在 mysql 中原生地执行 "选择所有除 x,y,z 之外" 的操作,我们需要查询(并缓存)表的现有列,然后从现有列中排除指定的列,这些列应该被 忽略(不选择)。

缓存:每个表的列名将被缓存,直到迁移目录的内容添加或删除。修改迁移目录内文件的内容不会重新缓存列。请在进行新的 部署/迁移 时考虑清除缓存!

fromToday, fromYesterday

选择今天或昨天创建的所有条目。

use LaracraftTech\LaravelUsefulAdditions\Traits\UsefulScopes;

$class = new class extends Model
{
    use UsefulScopes;

    protected $timestamps = true;
    protected $table = 'scope_tests';
};

$class->create(['foo' => 'foo1', 'bar' => 'bar1', 'quz' => 'quz1']);
$class->create(['foo' => 'foo2', 'bar' => 'bar2', 'quz' => 'quz2', 'created_at' => now()->yesterday()]);

$class::select('foo')->fromToday()->first()->toArray(); // return ['foo' => 'foo1']
$class::select('foo')->fromYesterday()->first()->toArray(); // return ['foo' => 'foo2']

RefreshDatabaseFast

这是一个特性,可以让您的测试套件中的数据库迁移变得非常、非常快!基本思路来自 Mayahi。它基本上 在迁移文件已更改时迁移您的数据库。因此,第一次 migrate:fresh 可能需要一段时间(取决于您有多少迁移),然后它会非常快。

可选地,如果您想在迁移后填充数据库,可以将 USEFUL_ADDITIONS_SEED_AFTER_FAST_DB_REFRESH 设置为 true

请确保将 .phpunit.database.checksum 添加到您的 .gitignore 文件中!

Pest

use LaracraftTech\LaravelUsefulAdditions\Traits\RefreshDatabaseFast;

uses(RefreshDatabaseFast::class);

it('does_something', function() {
    // ...
});

PHPUnit

use LaracraftTech\LaravelUsefulAdditions\Traits\RefreshDatabaseFast;
use Tests\TestCase;

class MyTest extends TestCase
{
    use RefreshDatabaseFast;
    
    /** @test **/
    public function it_does_something()
    {
        // ...
    }
}

命令

db:truncate

此命令将截断当前数据库连接的所有表。查看 --help 以了解参数和选项。例如,它还允许您仅截断特定表或禁用外键检查或以 强制 模式运行。

php artisan db:truncate
INFO  Start truncating tables.

Truncating table: failed_jobs .............................................. 135ms DONE
Truncating table: migrations ................................................ 87ms DONE
Truncating table: password_reset_tokens ..................................... 79ms DONE
Truncating table: personal_access_tokens .................................... 86ms DONE
Truncating table: users ..................................................... 78ms DONE

INFO  Finished truncating tables.

测试

composer test

更新日志

有关最近更改的更多信息,请参阅 更新日志

贡献

有关详细信息,请参阅 贡献指南

安全漏洞

有关如何报告安全漏洞的信息,请参阅 我们的安全策略

鸣谢

许可协议

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