|
Фильтрацию по значениям св-ва элемента и выборку решил для себя так: Создал класс ElementProperyTable, почему-то до сих пор его нет для таблицы b_iblock_element_property (1С-Битрикс: Управление сайтом 17.5.16. © Битрикс, 2016). Код |
---|
namespace Ra\Iblock;
use Bitrix\Main;
use Bitrix\Main\Entity;
class ElementProperyTable extends Main\Entity\DataManager{
/**
* Returns DB table name for entity.
*
* @return string
*/
public static function getTableName(){
return 'b_iblock_element_property';
}
/**
* Returns entity map definition.
*
* @return array
*/
public static function getMap()
{
return array(
'ID' => new Main\Entity\IntegerField('ID', array(
'primary' => true,
'autocomplete' => true,
'title' => "ID записи",
)),
'IBLOCK_PROPERTY_ID' => new Main\Entity\IntegerField('IBLOCK_PROPERTY_ID', array(
'title' => "ID свойства",
)),
'IBLOCK_ELEMENT_ID' => new Main\Entity\IntegerField('IBLOCK_ELEMENT_ID', array(
'title' => "ID элемента инфоблока",
)),
'VALUE' => new Main\Entity\StringField('VALUE', array(
'title' => "Значение",
)),
'VALUE_TYPE' => new Main\Entity\StringField('VALUE_TYPE', array(
'title' => "Тип значения",
)),
'VALUE_ENUM' => new Main\Entity\StringField('VALUE_ENUM', array(
'title' => "ID элемента списка в свойстве типа Список",
)),
'VALUE_NUM' => new Main\Entity\StringField('VALUE_NUM', array(
'title' => "VALUE_NUM",
)),
'DESCRIPTION' => new Main\Entity\TextField('DESCRIPTION', array(
'title' => "Описание",
)),
);
}
}
|
Подключаю его в нужном месте. И потом, использую его в 'runtime'. Код |
---|
/* Фильтрация по значению текстового поля (PROPERTY_TYPE = 'S') */
$arResult = \Bitrix\Iblock\ElementTable::getList(array(
'filter' => array(
// '=ID' => 18086,
'=PROPERTY_CODE' => "RA_TEST",
'=PROPERTY_VALUE' => "Тестовое_значение",
),
'select' => array('ID', 'NAME',
'PROPERTY_CODE' => 'PROPERTY_PROP.CODE', 'PROPERTY_VALUE' => 'PROPERTY.VALUE', 'PROPERTY_TYPE' => 'PROPERTY_PROP.PROPERTY_TYPE',
//'PROPERTY', 'PROPERTY_PROP'
),
'runtime' => array(
new Bitrix\Main\Entity\ReferenceField(
'PROPERTY',
'Ra\Iblock\ElementProperyTable',
array(
'=this.ID' => 'ref.IBLOCK_ELEMENT_ID'
),
array('join_type' => 'LEFT')
),
new Bitrix\Main\Entity\ReferenceField(
'PROPERTY_PROP',
'\Bitrix\Iblock\PropertyTable',
array(
'=this.PROPERTY.IBLOCK_PROPERTY_ID' => 'ref.ID'
),
array('join_type' => 'LEFT')
),
),
))->fetchAll();
|
Код |
---|
/* Фильтрация по значению поля типа "список" (PROPERTY_TYPE = 'L') */
$arResult = \Bitrix\Iblock\ElementTable::getList(array(
'filter' => array(
'=PROPERTY_CODE' => "SHOW_COLOR_SAMPLE_BUY",
'=PROPERTY_ENUM_VALUE' => "Да",
),
'select' => array('ID', 'NAME',
'PROPERTY_CODE' => 'PROPERTY_PROP.CODE', 'PROPERTY_VALUE' => 'PROPERTY.VALUE', 'PROPERTY_TYPE' => 'PROPERTY_PROP.PROPERTY_TYPE',
'PROPERTY_ENUM_VALUE' => 'PROPERTY_ENUM.VALUE', 'PROPERTY_ENUM_XML_ID' => 'PROPERTY_ENUM.XML_ID',
//'PROPERTY', 'PROPERTY_PROP', 'PROPERTY_ENUM'
),
'runtime' => array(
new Bitrix\Main\Entity\ReferenceField(
'PROPERTY',
'Ra\Iblock\ElementProperyTable',
array(
'=this.ID' => 'ref.IBLOCK_ELEMENT_ID'
),
array('join_type' => 'LEFT')
),
new Bitrix\Main\Entity\ReferenceField(
'PROPERTY_PROP',
'\Bitrix\Iblock\PropertyTable',
array(
'=this.PROPERTY.IBLOCK_PROPERTY_ID' => 'ref.ID'
),
array('join_type' => 'LEFT')
),
new Bitrix\Main\Entity\ReferenceField(
'PROPERTY_ENUM',
'\Bitrix\Iblock\PropertyEnumerationTable',
array(
'=this.PROPERTY.IBLOCK_PROPERTY_ID' => 'ref.PROPERTY_ID'
),
array('join_type' => 'LEFT')
),
),
))->fetchAll();
|
|