fibit / bitrix-entity-helper
Bitrix 框架的实体助手类
v1.0.0
2024-04-30 12:19 UTC
Requires
- php: >=7.0
README
Bitrix 实体便捷助手。
助手能够处理信息块、Highload 块和系统表中的数据。
安装
- 通过 composer 安装
composer require fibit/bitrix-entity-helper
- 添加自动加载器连接
require_once $_SERVER["DOCUMENT_ROOT"] . "/path/to/vendor/autoload.php";
方法
重要
entity
可以有以下三种类型之一
- int - 用于普通信息块
- string - 用于 Highload 块
- object - 用于系统实体
示例
1. getClass
方法
use \Fibit\EntityHelper as EH; EH::getClass(1); // Результат: \Bitrix\Iblock\Elements\ElementOffersTable EH::getClass("Data"); // Результат: \DataTable EH::getClass(new \Bitrix\Main\UserTable); // Результат: \Bitrix\Main\UserTable
2. getQuery
方法
该方法支持调用ExpressionField和ReferenceField。
use \Fibit\EntityHelper as EH; EH::getQuery( new \Bitrix\Main\UserTable, array( "select" => array("SHORT_NAME", "EMAIL"), "filter" => array("=ACTIVE" => "Y"), "order" => array("LAST_ACTIVITY_DATE" => "DESC"), "limit" => 100, ) );
结果
SELECT CONCAT(`main_user`.`LAST_NAME`, ' ', UPPER(SUBSTR(`main_user`.`NAME`, 1, 1)), '.') AS `SHORT_NAME`, `main_user`.`EMAIL` AS `EMAIL` FROM `b_user` `main_user` WHERE `main_user`.`ACTIVE` = 'Y' ORDER BY `main_user`.`LAST_ACTIVITY_DATE` DESC LIMIT 0, 100
3. getRows
方法
该方法支持调用ExpressionField和ReferenceField。
use \Fibit\EntityHelper as EH; EH::getRows( new \Bitrix\Main\UserTable, array( "select" => array("SHORT_NAME", "EMAIL"), "filter" => array("=ACTIVE" => "Y"), "order" => array("LAST_ACTIVITY_DATE" => "DESC"), "limit" => 100, ) );
结果
Array( [result] => Array( [0] => Array( [SHORT_NAME] => Иванов И. [EMAIL] => ivanov@example.com ) [1] => Array( [SHORT_NAME] => Петров П. [EMAIL] => petrov@example.com ) ... [99] => Array( [SHORT_NAME] => Сидоров С. [EMAIL] => sidorov@example.com ) ) [count] => 100 [nav] => [time] => 0.010181903839111 )
3.1. 分页导航
如果将方法中的参数count_total => true
设置为true,则查询执行的结果将返回一个nav
对象。该对象可以用于组件bitrix:main.pagenavigation
以显示分页导航。默认将加载20条记录,但可以通过在调用方法时指定不同的limit
值来更改此值。
use \Fibit\EntityHelper as EH; $data = EH::getRows( new \Bitrix\Main\UserTable, array( "count_total" => true, ... "limit" => 20 ) );
<?$APPLICATION->IncludeComponent( "bitrix:main.pagenavigation", "", array( "NAV_OBJECT" => $data["nav"], "SEF_MODE" => "N" ), true );?>
重要
导航链中的当前页是根据URL中的数据确定的,因此在使用表单(例如,用于过滤)的情况下,应通过GET方法发送表单。
3.2. 与 ExpressionField 交互的示例
例如,我们有一个名为“Operations”的 highload 信息块,结构如下
我们需要获取每个 UF_MEMBER
在 UF_SUM
上的总和,时间范围从 01.01.24 00:00 到 01.01.24 23:59
use \Fibit\EntityHelper as EH; EH::getRows( "Operations", array( "select" => array("UF_MEMBER", "EF_SUM"), "filter" => array( "><UF_DATETIME" => array( "01.01.2024 00:00:00", "01.01.2024 23:59:59" ) ), "runtime" => array( new \Bitrix\Main\Entity\ExpressionField( "EF_SUM", "SUM(%s)", "UF_SUM" ) ) ) );
结果
Array( [result] => Array( [0] => Array( [UF_MEMBER] => Иванов И. [EF_SUM] => 200 ) [1] => Array( [UF_MEMBER] => Петров П. [EF_SUM] => 100 ) ) [count] => 2 [nav] => [time] => 0.020122900039128 )
4. getRow
方法
该方法支持调用ExpressionField和ReferenceField。
use \Fibit\EntityHelper as EH; EH::getRow( new \Bitrix\Main\UserTable, array( "select" => array("SHORT_NAME", "EMAIL"), ) );
结果
Array( [result] => Array( [SHORT_NAME] => Иванов И. [EMAIL] => ivanov@example.com ) [time] => 0.0097489356994629 )
5. addRow
方法
use \Fibit\EntityHelper as EH; EH::addRow( "Data", array( "UF_NAME" => "Row 1", "UF_XML_ID" => "row-1", ) );
结果
Array( [result] => 1 // ID элемента [time] => 0.005182203839221 )
6. updRow
方法
use \Fibit\EntityHelper as EH; EH::updRow( "Data", 1, // ID обновляемого элемента array( "UF_NAME" => "Row 2", ) );
结果
Array( [result] => 1 // ID элемента [time] => 0.004221103835001 )
7. delRow
方法
use \Fibit\EntityHelper as EH; EH::delRow( "Data", 1, // ID удаляемого элемента );
结果
Array( [result] => true [time] => 0.001111100000001 )