Заготовка Entity\DataManager для типичной таблицы
Типичная таблица товаров выглядит следующим образом:
- ordergoods.php
namespace Vendor\Dealer\Orm\Order; use \Bitrix\Main\Entity; /* Товары из заказа. ``` CREATE TABLE `vendor_dealer_order_goods` ( `ID` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `ORDER_GUID` CHAR(36) NOT NULL COMMENT 'GUID заказа в 1С', `ART` CHAR(36) NOT NULL COMMENT 'артикул', `CNT` INT(11) UNSIGNED NOT NULL COMMENT 'количество', `PRICE` DECIMAL(16,2) NOT NULL COMMENT 'цена за штуку', `SUM_VAT` DECIMAL(16,2) NOT NULL COMMENT 'НДС, сумма', `SUM_WITH_VAT` DECIMAL(16,2) NOT NULL COMMENT 'сумма с НДС', `DATE_BEGIN` DATE NOT NULL COMMENT 'Ожидаемая дата прихода для товаров в пути - "с"', `DATE_END` DATE NOT NULL COMMENT 'Ожидаемая дата прихода для товаров в пути - "по"', `TYPE` ENUM('reserved', 'transit', 'ns') NOT NULL COMMENT 'тип: reserved - "обычный" зарезервированный товар, transit - в пути, ns - НС', `PLACE_TYPE` VARCHAR(255) NOT NULL COMMENT 'Тип места (f.e. "Склады")', `PLACE` CHAR(36) NOT NULL COMMENT 'GUID места', PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=cp1251; ALTER TABLE `vendor_dealer_order_goods` ADD KEY(`ORDER_GUID`); ``` */ class OrderGoodsTable extends Entity\DataManager { public static function getTableName() { return 'vendor_dealer_order_goods'; } public static function getMap() { return array( new Entity\IntegerField('ID', array( 'primary' => true )), new Entity\StringField('ORDER_GUID', array( 'size' => 36 )), new Entity\StringField('ART', array( 'size' => 36 )), new Entity\IntegerField('CNT', array()), new Entity\FloatField('PRICE', array()), new Entity\FloatField('SUM_VAT', array()), new Entity\FloatField('SUM_WITH_VAT', array()), new Entity\DateField('DATE_BEGIN', array( 'default_value' => new \Bitrix\Main\Type\Datetime )), new Entity\DateField('DATE_END', array( 'default_value' => new \Bitrix\Main\Type\Datetime )), new Entity\EnumField('TYPE', array( 'values' => array('reserved', 'transit', 'ns') )), new Entity\StringField('PLACE_TYPE', array( 'size' => 255 )), new Entity\StringField('PLACE', array( 'size' => 36 )) ); } public static function truncate() { self::getEntity()->getConnection()->queryExecute('TRUNCATE TABLE `vendor_dealer_order_goods`'); } public static function deleteByOrderGuid($o_guid) { self::getEntity()->getConnection()->queryExecute("DELETE FROM `vendor_dealer_order_goods` WHERE `ORDER_GUID` = '".addslashes($o_guid)."'"); } public static function speedAdd($item) { $query = sprintf("INSERT INTO `vendor_dealer_order_goods` (`ORDER_GUID`, `ART`, `CNT`, `PRICE`, `SUM_VAT`, `SUM_WITH_VAT`, `DATE_BEGIN`, `DATE_END`, `TYPE`, `PLACE_TYPE`, `PLACE`) VALUES ('%s', '%s', %d, %F, %F, %F, '%s', '%s', '%s', '%s', '%s') ", addslashes($item['ORDER_GUID']), addslashes($item['ART']), $item['CNT'], $item['PRICE'], $item['SUM_VAT'], $item['SUM_WITH_VAT'], $item['DATE_BEGIN'] ? $item['DATE_BEGIN']->format('Y-m-d') : '0000-00-00', $item['DATE_END'] ? $item['DATE_END']->format('Y-m-d') : '0000-00-00', addslashes($item['TYPE']), addslashes($item['PLACE_TYPE']), addslashes($item['PLACE']) ); self::getEntity()->getConnection()->queryExecute($query); } }
В файле описана схема таблицы (DDL).
speedAdd
- для быстрой вставки данных в таблицу, без обработки событийtruncate
,deleteByOrderGuid
- вспомогательные методы