littlerobinson / querybuilder-php
用于创建具有JSON输入的查询构建器的库。
v1.0.5
2017-09-06 15:10 UTC
Requires
- php: >=7.0
- doctrine/orm: *
- phpoffice/phpexcel: ~1.8
- symfony/yaml: *
Requires (Dev)
- phpunit/phpunit: 6.*
This package is not auto-updated.
Last update: 2024-09-29 04:42:43 UTC
README
在数据库上动态生成查询。该工具允许在YML文件中设置数据库的配置。
开发者可以修改配置文件中的某些值,例如,将表中的字段进行翻译。
Query Builder以请求的字段以及条件作为输入的json文件。从该文件中构建查询、执行并返回结果。
配置文件
在执行writeDatabaseYamlConfig方法时,将生成一个包含数据库反向工程配置的YAML文件。您可以更改
- 表名(_table_translation)
- 表可见性(__table_visibility)
- 字段名(__field_translation)
- 字段可见性(__field_visibility)
category: _table_translation: catégorie _table_visibility: true _primary_key: - id id: name: id _field_translation: null _field_visibility: true type: integer default: null length: null not_null: true definition: null fullname: name: fullname _field_translation: nom complet _field_visibility: true type: string default: null length: 150 not_null: true definition: null shortname: name: Nom court _field_translation: null _field_visibility: true type: string default: null length: 50 not_null: true definition: null description: name: description _field_translation: null _field_visibility: true type: text default: null length: null not_null: false definition: null created_at: name: created_at _field_translation: date de création _field_visibility: true type: datetime default: null length: null not_null: true definition: null updated_at: name: updated_at _field_translation: date de modification _field_visibility: true type: datetime default: null length: null not_null: true definition: null post: _table_translation: article _table_visibility: true _primary_key: - id id: name: id _field_translation: null _field_visibility: true type: integer default: null length: null not_null: true definition: null title: name: title _field_translation: titre _field_visibility: true type: string default: null length: 150 not_null: true definition: null description: name: description _field_translation: null _field_visibility: true type: text default: null length: null not_null: false definition: null is_published: name: is_published _field_translation: publié _field_visibility: true type: boolean default: null length: null not_null: true definition: null content: name: content _field_translation: contenu _field_visibility: true type: text default: null length: null not_null: false definition: null created_at: name: created_at _field_translation: date de creation _field_visibility: true type: datetime default: null length: null not_null: true definition: null updated_at: name: updated_at _field_translation: date de modification _field_visibility: true type: datetime default: null length: null not_null: true definition: null category_id: name: category_id _field_translation: catégorie _field_visibility: true type: integer default: null length: null not_null: false definition: null user_id: name: user_id _field_translation: utilisateur _field_visibility: true type: integer default: null length: null not_null: true definition: null slug: name: slug _field_translation: null _field_visibility: true type: string default: null length: 150 not_null: true definition: null image_name: name: image_name _field_translation: image _field_visibility: true type: string default: null length: 255 not_null: true definition: null _FK: category_id: { tableName: category, columns: category_id, foreignColumns: id, name: FK_5A8A6C8D12469DE2, options: { onDelete: null, onUpdate: null } } user_id: { tableName: user, columns: user_id, foreignColumns: id, name: FK_5A8A6C8DA76ED395, options: { onDelete: null, onUpdate: null } } post_tag: _table_translation: null _table_visibility: false _primary_key: - post_id - tag_id post_id: name: post_id _field_translation: null _field_visibility: true type: integer default: null length: null not_null: true definition: null tag_id: name: tag_id _field_translation: null _field_visibility: true type: integer default: null length: null not_null: true definition: null _FK: post_id: { tableName: post, columns: post_id, foreignColumns: id, name: FK_5ACE3AF04B89032C, options: { onDelete: CASCADE, onUpdate: null } } tag_id: { tableName: tag, columns: tag_id, foreignColumns: id, name: FK_5ACE3AF0BAD26311, options: { onDelete: CASCADE, onUpdate: null } } tag: _table_translation: null _table_visibility: true _primary_key: - id id: name: id _field_translation: null _field_visibility: true type: integer default: null length: null not_null: true definition: null name: name: name _field_translation: nom _field_visibility: true type: string default: null length: 35 not_null: true definition: null created_at: name: created_at _field_translation: date de création _field_visibility: true type: datetime default: null length: null not_null: true definition: null updated_at: name: updated_at _field_translation: date de modification _field_visibility: true type: datetime default: null length: null not_null: true definition: null user: _table_translation: utilisateur _table_visibility: true _primary_key: - id id: name: id _field_translation: null _field_visibility: true type: integer default: null length: null not_null: true definition: null username: name: username _field_translation: null _field_visibility: true type: string default: null length: 50 not_null: true definition: null password: name: password _field_translation: null _field_visibility: false type: string default: null length: 64 not_null: true definition: null email: name: email _field_translation: null _field_visibility: true type: string default: null length: 60 not_null: true definition: null is_active: name: is_active _field_translation: actif _field_visibility: true type: boolean default: null length: null not_null: true definition: null api_key: name: api_key _field_translation: false _field_visibility: true type: string default: null length: 255 not_null: true definition: null created_at: name: created_at _field_translation: date de creation _field_visibility: true type: datetime default: null length: null not_null: true definition: null updated_at: name: updated_at _field_translation: date de modification _field_visibility: true type: datetime default: null length: null not_null: true definition: null
安全
将此添加到config.yml文件中,以告诉程序在哪里找到限制值。
# config.yml user: { name: user, type: cookie } association: { name: group, type: cookie } rules: user: { type: cookie } security: database: post: post.user category: category.post.user ...
或者这样,没有规则。
# config.yml user: { name: ~, type: ~ } association: { name: ~, type: ~ } rules: ~ security: ~ ...
请求
当执行请求时,将生成一个代表查询的json值。
{
"from":{
"post":{
"id":"id",
"title":"title",
"category_id":{
"id":"id",
"fullname":"fullname"
}
}
},
"where":[
{
"AND":{
"category.fullname":{
"LIKE":[
"prog"
]
}
}
}
],
"limit":0,
"offset":0
}
输出
SELECT post_id.id AS post_id_id, post_id.title AS post_id_title, category_id.id AS category_id_id, category_id.fullname AS category_id_fullname FROM post post_id LEFT JOIN category category_id ON category_id.id = post_id.category_id WHERE category_id.fullname LIKE '%prog%'
测试
phpunit --bootstrap vendor/autoload.php tests/
IHM
IHM分为3个区域
- appRequest : 用于请求的父区域。它包含2个子区域
- SelectItem : 选择表和行的区域
- ConditionItem : 构建请求条件的区域
- SpreadSheet : 显示网格表的搜索结果区域
appRequest中的JavaScript变量列表
- dbObj : JSON数据库配置的对象表示
- foreignTables : 外部表列表
- items : 可选表和行的对象表示,包括选中状态和翻译名称
- from : 代表请求的对象(用于json查询)
- where : 代表where请求的对象(用于json查询)
- conditions : 表示条件请求的对象数组
- columns : 包含翻译的列结果列表
- data : 结果数据
- jsonQuery : json查询
- sqlRequest : 请求查询