bitrix-best-practice-sql
About bitrix-best-practice-sql
bitrix-best-practice-sql is a skill for developers working with Bitrix databases. It helps identify relevant rules for SQL execution, ORM queries and writes, entity mappings, and transactions, with guidance to prefer Bitrix-native data patterns.
Key features
- 01Focuses on database-related tasks
- 02Selects rules by database concern
- 03Covers SQL execution and safe construction
- 04Covers ORM mappings, queries, and writes
- 05Explains transaction practices
Use cases
- 01Implement an ORM query or database write
- 02Plan a schema change or data migration
- 03Handle transaction boundaries across operations
- 04Assess SQL queries and index performance
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ bitrix-tools/ best-practice --skill bitrix-best-practice-sqlAfter installing, type/bitrix-best-practice-sqlin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
rules/orm-datamanager-map.mdorm-objectify.mdorm-persistence-write.mdorm-query-filter.mdquery-execution.mdtransactions.mdDetails
From the project READMEBitrix Best Practice SQL
Скилл помогает понять, какие нужно использовать SQL/DB best practices. Используй его только для задач, где есть работа с базой данных: схема, SQL-запросы, ORM-модели, выборки, запись, миграции данных, индексы, транзакции или другие DB-boundary решения.
Как использовать
- Определи, действительно ли задача затрагивает SQL, ORM или хранение данных.
- Выдели конкретную DB-область задачи: чтение, запись, схема, миграция, производительность, консистентность или безопасность запроса.
- Открой только те rule-файлы, которые напрямую относятся к этой DB-области.
- Сначала следуй более строгим правилам репозитория и ограничениям модуля.
- Предпочитай framework-native и Bitrix-native паттерны работы с данными вместо самодельных SQL- и storage-абстракций.
Выбор rule-файла
Когда читать query-execution.md
Читай query-execution.md, если задача затрагивает хотя бы одну из этих областей:
Bitrix\Main\Application::getConnection(),Bitrix\Main\DB\ConnectionилиgetSqlHelper();query(),queryScalar(),queryExecute(),add(),addMulti()илиBitrix\Main\DB\Result;Bitrix\Main\DB\SqlExpression, placeholders?s,?i,?f,?#,?@или ручную сборку SQL из частей;SqlHelper::quote(),forSql(),prepareInsert(),prepareUpdate(),convertToDb*()илиgetTopSql();- замену legacy
$DB/CDatabaseна D7 DB API; - выбор между raw SQL через
Connectionи более высокоуровневым framework-native DB path.
Когда читать orm-datamanager-map.md
Читай orm-datamanager-map.md, если задача затрагивает хотя бы одну из этих областей:
- класс
*Table extends Bitrix\Main\ORM\Data\DataManager; getTableName(),getConnectionName(),getMap(),getUfId(),postInitialize()илиsetDefaultScope();- описание полей через
Bitrix\Main\ORM\Fields\Fieldи наследников вместо legacy array map; Reference,OneToMany,ManyToMany,configureJoinType(),configureCascade*Policy()именно на уровне декларации сущности;- primary key, autocomplete, validators, save/fetch modifiers, title и default values в entity map;
- выбор между typed field objects и старым массивом в
getMap().
Когда читать orm-objectify.md
Читай orm-objectify.md, если задача затрагивает хотя бы одну из этих областей:
Bitrix\Main\ORM\Objectify\EntityObject,Collection,createObject(),createCollection(),wakeUpObject()илиwakeUpCollection();get(),require(),remindActual(),fill(),isFilled(),isChanged(),collectValues();- работу с relation graph через
addTo(),removeFrom(),removeAll()или collection lifecycle; Collection::walk(),filter(),find(),merge(),hasByPrimary()илиgetByPrimary();- выбор между Objectify-объектами и массивами результата;
- object state (
RAW,ACTUAL,CHANGED,DELETED) и in-memory поведение ORM.
Когда читать orm-query-filter.md
Читай orm-query-filter.md, если задача затрагивает хотя бы одну из этих областей:
DataManager::query(),getList(),getRow(),getByPrimary()илиgetCount();Bitrix\Main\ORM\Query\Query,Query::filter(),ConditionTree,where*,having*,logic()или nested filters;fetchObject(),fetchCollection(),fetch(),fetchAll()и выбор между object fetch и массивами;- runtime fields,
registerRuntimeField(),Query::expr(),ExpressionFieldв query-path; buildFilterSql(),disableDataDoubling(), private fields, aggregation/object-fetch restrictions;- выбор между modern query builder и legacy filter array.
Когда читать orm-persistence-write.md
Читай orm-persistence-write.md, если задача затрагивает хотя бы одну из этих областей:
DataManager::add(),update(),delete(),addMulti(),updateMulti()или object/collectionsave();DeleteByFilterTrait::deleteByFilter(),MergeTrait::merge()или low-level ORM write helpers;Bitrix\Main\ORM\Data\AddStrategy,InsertIgnore,Merge,MergeByDefaultTrait,InsertIgnoreByDefaultTrait,AddMergeTraitилиAddInsertIgnoreTrait;- выбор между обычной ORM-записью, batch-операцией, merge/upsert и delete-by-filter;
- события ORM при записи,
ignoreEvents, cache cleanup и caveats batch persistence; - массовая запись или обновление нескольких строк через ORM lifecycle.
Когда читать transactions.md
Читай transactions.md, если задача затрагивает хотя бы одну из этих областей:
Connection::startTransaction(),commitTransaction()илиrollbackTransaction();- вложенные транзакции, savepoint, баланс уровней или
TransactionException; - фиксацию и откат нескольких SQL/ORM-операций в одном соединении;
- различия transaction API MySQL, PostgreSQL, MSSQL и Oracle.