calderawp / caldera-forms-query
Caldera Forms 查询库
Requires
- php: >=5.6
- calderawp/caldera-containers: ^0.2
- nilportugues/sql-query-builder: ^1.5
Requires (Dev)
- php: ^7.1
- composer/installers: ~1.0
- desertsnowman/caldera-forms: dev-feature/2404
- jakub-onderka/php-parallel-lint: ^1.0
- phpunit/phpunit: ^7.0
- squizlabs/php_codesniffer: ^3.2
This package is auto-updated.
Last update: 2024-09-19 13:17:34 UTC
README
此库为开发者提供了一种友好的方式来查询或删除 Caldera Forms 的条目数据。
为什么?
- 为了提供我们需要的查询类型,以便在 Caldera Forms 中添加 GDPR 合规性,用于报告和删除数据。
- 为了提供我们需要的查询类型,以改进 Caldera Forms 的功能,如条目查看器、条目导出、条目编辑和连接表单。
安装
composer require calderawp/caldera-forms-query
要求
- WordPress - 已测试 4.8,最新版本和 trunk
- PHP 5.6+ - 已测试 PHP 7.1 和 7.2
- Caldera Forms 1.6.0+ - 已测试 Caldera Forms 1.6.1 测试版 1
状态
- 正常工作
- 尚不支持按日期范围选择/删除
- 需要更好地清理预准备的 SQL。
用法
基本查询
/** * Examples of simple queries * * Using the class: \calderawp\CalderaFormsQuery\Features\FeatureContainer * Via the static accessor function: calderawp\CalderaFormsQueries\CalderaFormsQueries() */ /** First make the function usable without a full namespace */ use function calderawp\CalderaFormsQueries\CalderaFormsQueries; /** Do Some Queries */ //Select all data by user ID $entries = CalderaFormsQueries()->selectByUserId(42); //Select all entries that have a field whose slug is "email" and the value of that field's value is "delete@please.eu" $entries = CalderaFormsQueries()->selectByFieldValue( 'email', 'delete@please.eu' ); //Select all entries that do not have field whose slug is "size" and the value of that field's value is "big" $entries = CalderaFormsQueries()->selectByFieldValue( 'size', 'big', false ); //Delete all data by Entry ID CalderaFormsQueries()->deleteByEntryIds([1,1,2,3,5,8,42]); //Delete all data by User ID CalderaFormsQueries()->deleteByUserId(42);
分页查询
selectByFieldValue 功能方法默认将查询限制为 25。您可以通过第 4 和第 5 个参数设置页码和限制。
/** * Examples of simple queries * * Using the class: \calderawp\CalderaFormsQuery\Features\FeatureContainer * Via the static accessor function: calderawp\CalderaFormsQueries\CalderaFormsQueries() */ /** First make the function usable without a full namespace */ use function calderawp\CalderaFormsQueries\CalderaFormsQueries; /** Do Some Queries */ //Select all entries that have a field whose slug is "email" and the value of that field's value is "delete@please.eu" //The first 25 entries $entries = CalderaFormsQueries()->selectByFieldValue( 'email', 'delete@please.eu' ); //The second 25 entries $entries = CalderaFormsQueries()->selectByFieldValue( 'email', 'delete@please.eu', true, 2 ); //Get 5th page, with 50 results per page $entries = CalderaFormsQueries()->selectByFieldValue( 'email', 'delete@please.eu', true, 5, 50 );
构造其他查询
功能容器提供了辅助方法,允许执行像上面列出的简单查询。它还公开了底层的查询生成器。
您可以使用 getQueries()
方法访问任何生成器。例如
$featureContainer = \calderawp\CalderaFormsQueries\CalderaFormsQueries(); $fieldValue = 'X@x.com'; $formId = 'CF5afb00e97d698'; $count = Caldera_Forms_Entry_Bulk::count($formId ); $entrySelector = $featureContainer ->getQueries() ->entrySelect();
is()
辅助方法
这是一个更完整的示例,展示了选择条目值,其中 slug 为 primary_email
的字段是 roy@hiroy.club
,slug 为 first_name
的字段是 Mike
。它还使用 is()
方法添加 WHERE 语句,以及使用 addPagination()
方法查询第二页的结果,每页 50 个结果。
$featureContainer = \calderawp\CalderaFormsQueries\CalderaFormsQueries(); $entrySelector = $featureContainer ->getQueries() ->entrySelect() ->is( 'primary_email', 'roy@hiroy.club' ) ->is( 'first_name', 'Mike' ) ->addPagination(2,50 );
in()
辅助方法
此示例展示了选择所有条目值,其中条目 ID 在一个条目 ID 数组中。
$featureContainer = \calderawp\CalderaFormsQueries\CalderaFormsQueries(); $entrySelector = $featureContainer ->getQueries() ->entrySelect() ->in( 'entry_id', [ 42, 3 ] );
查询生成器
所有查询生成器扩展了 \calderawp\CalderaFormsQuery\QueryBuilder
类并实现 \calderawp\CalderaFormsQuery\CreatesSqlQueries
。
查询生成器负责创建 SQL 查询。它们不执行 sequel 查询。
选择查询生成器
选择查询生成器扩展 \calderawp\CalderaFormsQuery\Select\SelectQueryBuilder
并实现 \calderawp\CalderaFormsQuery\Select\DoesSelectQuery
和 \calderawp\CalderaFormsQuery\Select\DoesSelectQueryByEntryId
。
SelectQueryBuilder
的有用方法
in()
使用查询生成器执行 SQL 查询
SELECT
FeatureContainer
的 getQueries()
方法返回一个 calderawp\CalderaFormsQuery\Features\Queries
实例。当我们传递一个 SelectQueryBuilder
给它时,它提供了一个 select
方法,返回一个包含 stdClass
对象的结果数组。
$featureContainer = \calderawp\CalderaFormsQueries\CalderaFormsQueries(); $entryValueSelect = $featureContainer ->getQueries() ->entryValuesSelect() ->is( 'size', 'large' ); $featureContainer->getQueries()->select( $entryValueSelect );
您也可以作为字符串访问生成的 SQL。
$featureContainer = \calderawp\CalderaFormsQueries\CalderaFormsQueries(); $sql = $featureContainer ->getQueries() ->entryValuesSelect() ->is( 'size', 'large' ) ->getPreparedSql();
DELETE
Queries
类还有一个 delete
方法,我们可以传递一个 DeleteQueryBuilder
来执行数据库的 DELETE 查询。
开发
安装
需要 git 和 Composer
git clone git@github.com:calderawp/caldera-forms-query.git
cd caldera-forms-query
composer install
本地开发环境
包含并提供了本地开发环境。它用于集成测试。需要 Composer、Docker 和 Docker Compose。
- 安装本地环境和 WordPress "单元" 测试套件
composer wp-install
现在您应该在 https://:8888/ 有 WordPress
- (重新)启动服务器:一旦服务器安装完成,您可以重新启动它
composer wp-start
测试
安装
按照上述步骤创建本地开发环境,然后您可以使用下一节中列出的命令。
使用
从插件的根目录运行以下命令。
- 运行所有测试、代码检查和修复
composer tests
- 运行单元测试
composer unit-tests
- 运行 WordPress 集成测试
composer wp-tests
- 修复所有代码格式
composer formatting
WordPress 和 Caldera Forms 依赖
目前,此库依赖于 Caldera Forms 和 WordPress(用于 \WPDB
)。当 caldera-interop 与此工具集成时,这将发生变化,可能会出现破坏性更改。
其他事项。
版权所有 2018 CalderaWP LLC。许可证:GPL v2 或更高版本。