8 181 views

Bitrix D7

Манипуляции с сущностями или записями в таблицах Битрикс D7

http:// bxit . ru /development/bitrix-coding/razrabotka-na-d7/operatsii-s-sushchnostyami-d7/

Добавление элемента сущности, add():

$result = MynameTalbe::add(
    array(
        "field_1" => "val 1",
        "field_2" => "val 2",
        "field_3" => "val 3",
    )
);
if($result->isSuccess())
{
    $ID = $result->getId();
    echo "Добавлен новый элемент: ".$ID;
}
else
{
    $error = $result->getErrorMessages();
    echo "Ошибка добавления нового элемента: <pre>".var_export($error, true)."</pre>";
}

Обновление элемента сущности, update():

$ID = 1; // ID  элемента
$result = MynameTalbe::update(
    $ID,
    array(
        "field_1" => "val 11", // Поля, которые меняем
    )
);
if($result->isSuccess())
{
    echo "Элемент обновлен!";
}
else
{
    $error = $result->getErrorMessages();
    echo "Ошибка обновления элемента: <pre>".var_export($error, true)."</pre>";    
} 

Удаление элемента сущности, delete():

$ID = 1; // ID  элемента
$result = MynameTalbe::delete($ID);
if($result->isSuccess())
{
    echo "Элемент удален!";
}
else
{
    $error = $result->getErrorMessages();
    echo "Ошибка удаления элемента: <pre>".var_export($error, true)."</pre>";    
} 

При удалении не существующего элемента ошибки не происходит.

Выборка данных

Получение всех записей, getList():

// Получение всех строк
$result = MyTable::getList(
    array(
        'select'  => array('PARAMETR_1', 'PARAMETR_2', ..), // имена полей, которые необходимо получить в результате
        'filter'  => array('PARAMETR_1' => 'val_1', 'PARAMETR_2' => 'val_2', ..), // фильтр выбираемых элементов
        'group'   => array('PARAMETR_1', 'PARAMETR_2', ..), // явное указание полей, по которым нужно группировать результат
        'order'   => array('PARAMETR_1' => 'DESC', 'PARAMETR_2' => 'ASC', ..), // поля и направление сортировки
        'limit'   => number, // количество возвращаемых элементов
        'offset'  => number, // смещение для limit
        'runtime' => array() // динамически определенные поля
    )
);

// 1. fetch()
$rows = array();
while ($row = $result->fetch())
{
    $rows[] = $row;
}

// 2. fetchAll()
$rows = $result->fetchAll();

Примеры:

// 1С-Битрикс D7 выборка всех элементов инфоблока ID = 13 всего лишь одной строкой
$arResult["ITEMS"] = \Bitrix\Iblock\ElementTable::getList(array('filter' => array('IBLOCK_ID' => 13))) -> fetchAll();

// 1С-Битрикс D7 выборка всех элементов инфоблока ID = 13 в цикле
$result = \Bitrix\Iblock\ElementTable::getList(array('filter' => array('IBLOCK_ID' => 13)));
while ($row = $result->fetch())
{
    $arResult["ITEMS"][] = $row;
}

Получение одной строки, getRow():

$row = MyTable::getRow(array('select' => array(), 'filter' => array(), ..));

Получение по первичному ключу (ID в большинстве случаев), getById():

$row = MyTable::getById($ID)->fetch();

Получение строки записи по первичному ключу (ID в большинстве случаев), getRowById():

$row = MyTable::getRowById($ID);

Получение по первичному ключу (ID в большинстве случаев) записи с параметрами, getByPrimary():

$row = MyTable::getByPrimary(array("ID" => 1), array("select" => array(), "filter" => array(), ..))->fetch();

Фильтр ‘filter’ => array() массив может иметь склейку параметров AND или OR.

По умолчанию стоит AND:

'filter' => array(
    'PARAMETR_1' => 1,
    'PARAMETR_2' => 2,
    'PARAMETR_3' => 3,
    'PARAMETR_4' => 4,
)

// или так:
'filter' => array(
    'LOGIC' => 'AND',
    array(            
        'PARAMETR_1' => 1,
        'PARAMETR_2' => 2,
    ),
    array(            
        'PARAMETR_3' => 3,
        'PARAMETR_4' => 4,
    )
)

Вариант с OR:

'filter' => array(
    'LOGIC' => 'OR',
    array(            
        'PARAMETR_1' => 1,
        'PARAMETR_2' => 2,
    ),
    array(            
        'PARAMETR_3' => 3,
        'PARAMETR_4' => 4,
    )
)

В фильтре можно использовать операторы сравнения:

'filter' => array(
    '=PARAMETR_1' => 'val_1', // = равно val_1
    '!=PARAMETR_2' => 'val_2', // != не равно val_2

    '%PARAMETR_3' => 'val_3', // % ищет подстроку в val_3
    '!%PARAMETR_4' => 'val_4', // !% ищет все значения, которых нет подстроки в val_4

    '>PARAMETR_5' => 'val_5', // > ищет поля, которые больше, чем val_5  
    '<PARAMETR_6' => 'val_6', // < ищет поля, которые меньше, чем val_6   
    '>=PARAMETR_7' => 'val_7', // >= ищет поля, которые больше или равны val_7
    '<=PARAMETR_8' => 'val_8', // <= ищет поля, которые меньше или равны val_8

    '><PARAMETR_9' => array(MIN, MAX), // >< между, ищет поля, значения которыx попадает в интервал в массиве array(MIN, MAX)
    '>!<PARAMETR_10' => array(MIN, MAX), // >!< не между, ищет поля, значения которыx не попадают в интервал в массиве array(MIN, MAX)

    '=%PARAMETR_11' => 'val_11', // =% LIKE
    '%=PARAMETR_12' => 'val_12', // %= LIKE
    '!=%PARAMETR_13' => 'val_13', // !=% NOT LIKE
    '!%=PARAMETR_14' => 'val_14', // !%= NOT LIKE

    '@ IN (EXPR)PARAMETR_15' => 'val_15', // @ IN (EXPR) в качестве значения передается объект DB\SqlExpression
    '!@ NOT IN (EXPR)PARAMETR_16' => 'val_16', // !@ NOT IN (EXPR) в качестве значения передается объект DB\SqlExpression  
)

Параметр ‘runtime’ => array(). Параметр работает так, как будто к сущности было добавлено поле Parametr_cnt, не объявленное в \Bitrix\Main\Entity\DataManager::getMap(). С помощью runtime можно дополнять ORM сущности, например написанные не вами, но будут использоваться только в вашем коде:

$result = MyTable::getList(
    array(
        "select" => array(
            "Parametr_cnt"
        ),
        "runtime" => array(
            new Main\Entity\ExpressionField("Parametr_cnt", COUNT(*))
        )
    )
);

// или так
$result = MyTable::getList(
    array(
        "select" => array(
            new Main\Entity\ExpressionField("Parametr_cnt", COUNT(*))
        )
    )
);

// или так (тут поле не описано в сущности в getMap(), но создано в таблице mySQL)
$result = MyTable::getList(
    array(
        "select" => array(
            "Parametr_1",
            "Parametr_2",
            "Parametr_cnt"
        ),
        "filter" => array(
            "Parametr_cnt" => 1
        ),
        "runtime" => array(
            new Main\Entity\IntegerField("Parametr_cnt")
        )
    )
);
This site is using the Seo Wizard wordpress plugin by www.seowizard.org.