zjkiza / sql-blade
该软件包可以执行原始 SQL 查询,并具有嵌入 Blade 扩展的灵活性,从而能够使用 Blade 语法动态创建查询。
v0.5.3
2024-07-22 16:21 UTC
Requires
- php: >=8.0
- doctrine/dbal: ^2.0|^3.0
- illuminate/contracts: ^5.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^5.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- ekino/phpstan-banned-code: ^1.0
- friendsofphp/php-cs-fixer: ^3.56
- orchestra/testbench: ^8.18
- pdepend/pdepend: ^2.16
- phpmd/phpmd: ^2.15
- phpstan/phpstan: ^1.11
- phpstan/phpstan-phpunit: ^1.4
- psalm/plugin-phpunit: ^0.19.0
- rector/rector: ^1.0
- vimeo/psalm: ^5.24
README
该软件包执行在单独文件中的原始 SQL 查询,具有嵌入 Blade 扩展的灵活性,从而能够使用 Blade 语法动态创建查询。
关于此软件包
- 在创建查询时可以使用 Blade 语法。
- 您将查询放置在单独的文件中。(例如:
select_user.blade.sql
)。 - 使用
Zjk\SqlBlade\Contract\SqlBladeInterface
服务执行您的查询。 - 执行结果
Zjk\SqlBlade\Contract\SqlBladeInterface->executeQuery(..)
是 Doctrine\DBAL\Driver\Result 的实例,使用它们的方法来获取结果。 - 通过事务执行查询
Zjk\SqlBlade\Contract\SqlBladeInterface->transaction(..)
安装
将 zjkiza/sql-blade
添加到您的 composer.json 文件中
composer require zjkiza/sql-blade
快速示例
使用此软件包
必须定义用于存储包含 SQL 查询的文件的目录。
在文件 config/view.php
中添加路径
示例
'paths' => [ ... app_path('Sql/User'), .. ],
创建一个 SQL 查询(到上面定义的目录)。示例(select_user.blade.sql
)
# file select_user.blade.sql SELECT u.id, u.email FROM users u WHERE 1 @isset($emails) AND u.email IN ( :emails ) @endif @isset($ids) AND u.id IN ( :ids ) @endif ORDER BY @isset($ids) u.id @else u.email @endisset ;
注意:在查询的末尾必须放置 ;
在 PHP 中工作,示例
namespace App\Example; use Zjk\SqlBlade\Contract\SqlBladeInterface; use Doctrine\DBAL\Result; class MyRepository { private SqlTwigInterface $sqlBlade; public function __construct(SqlBladeInterface $sqlBlade) { $this->sqlBlade = $sqlBlade; } public function users(): array { return $this->sqlBlade->executeQuery('select_user', [ 'emails' => ['foo@example.com', 'bar@example.com'] ],[ 'emails' => ArrayParameterType::STRING, ])->fetchAllAssociative() } public function withTransaction(): array { $result = $this->sqlBlade->transaction(function (SqlBladeInterface $sqlBlade): Result { return $sqlBlade->executeQuery('select_without_blade'); }, TransactionIsolationLevel::READ_UNCOMMITTED); return $result->fetchAllAssociative(); } }
构建复杂和精细的查询。
有时,根据应用程序的逻辑构建查询的灵活性是必不可少的。这正是 sqlBlade 发挥作用的地方,利用 Blade 预解析所有查询资源。这使得您可以根据需要动态地塑造查询。
查询日志
执行查询记录在 laravel.log
文件中。其中包含
- 文件名,
- 已执行的 SQL 查询,
- 参数,
- 参数类型,
- 查询执行时间(秒)。