zjkiza/sql-blade

该软件包可以执行原始 SQL 查询,并具有嵌入 Blade 扩展的灵活性,从而能够使用 Blade 语法动态创建查询。

安装次数: 1

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 0

开放问题: 0

类型:laravel-package

v0.5.3 2024-07-22 16:21 UTC

This package is auto-updated.

Last update: 2024-09-22 17:01:58 UTC


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 查询,
  • 参数,
  • 参数类型,
  • 查询执行时间(秒)。