reptily / sql-to-laravel-builder
SQL 到 Laravel 查询构建器
Requires
- greenlion/php-sql-parser: ^4.4
Requires (Dev)
- phpunit/phpunit: ^9.5
README
SQL 到 Laravel 查询构建器,一个用 PHP 编写的转换器
特性
- 将 SQL 查询转换为 Laravel 查询构建器。
- 辅助构建 Laravel 文档中指示的查询。
- 提供选项以与不同的结果进行交互。
支持
Laravel 8
开始使用
手动下载安装
下载仓库并通过 composer.json 安装所需包
Packagist
您还可以通过运行以下命令从 Packagist 安装:
composer require reptily/sql-to-laravel-builder
用法
简单示例
<?php use RexShijaku\SQLToLaravelBuilder\SQLToLaravelBuilder; require_once dirname(__FILE__) . './vendor/autoload.php'; $options = array('facade' => 'DB::'); $converter = new SQLToLaravelBuilder($options); $sql = "SELECT COUNT(*) FROM members"; echo $converter->convert($sql);
这将产生以下结果
DB::table('members')->count();
更复杂的示例
$sql = "SELECT department_id, count(*) FROM members LEFT JOIN details AS d ON d.member_id = members.member_id WHERE ( age = 25 OR ( salary = 2000 AND gender = 'm' ) ) AND id > 15 GROUP BY department_id HAVING height > 1.60"; echo $converter->convert($sql);
这将生成以下结果
DB::table('members') ->select('department_id', DB::raw('count(*)')) ->leftJoin('details AS d', 'd.member_id', '=', 'members.member_id') ->where(function ($query) { $query->where('age', '=', 25) ->orWhere(function ($query) { $query->where('salary', '=', 2000) ->where('gender', '=', 'm'); }); }) ->where('id', '>', 15) ->groupBy('department_id') ->having('height', '>', 1.60) ->get();
注意
如果您需要更改选项,或更全面地了解提供的选项,请参阅以下“选项”部分。Laravel 8 查询构建器文档中为每个用例提供了数十个示例,这些示例位于 examples 文件夹中。
选项
以下简要解释了一些重要选项
它是如何工作的?
SQL-To-Laravel-Builder 基于 PHP-SQL-Parser 构建。虽然 PHP-SQL-Parser 负责解析给定的 SQL 查询作为输入。PHP-SQL-Parser 的结果是 SQL-To-Laravel-Builder 的输入。
结构有三个主要部分
- 提取器类 - 帮助以更易于理解和处理的方式提取 SQL 查询部分。
- 构建器类 - 帮助构建查询构建器方法。
- 创建者 - 负责协调提取器和构建器之间的过程,以生成查询构建器的一部分。
已知问题
- 尚未对所有情况进行测试。
- 错误处理不佳。
贡献
请随意为开发、测试或最终错误报告做出贡献。
支持
有关 Marwan - SQL-To-Laravel-Builder 的一般问题,请发推文给 @rexshijaku 或给我发电子邮件至 rexhepshijaku@gmail.com。要快速了解教程,请查看仓库中提供的 examples 文件夹。
作者
Rexhep Shijaku
感谢
感谢所有创建并持续改进 PHP-SQL-Parser 的贡献者,没有它,这个项目将难以实现。
纪念
纪念在 2021 年以色列-巴勒斯坦危机中失去的无辜生命(包括仅六岁的 Marwan al-Masri)。
许可
MIT 许可证
版权所有 (c) 2021 | Rexhep Shijaku
特此授予任何获得本软件及其相关文档副本(“软件”)的人免费使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许将软件提供给获得软件的人使用,但受以下条件限制
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该责任是基于合同、侵权或其他法律依据,无论该责任产生于、源于或与软件或软件的使用或其他使用方式有关。