bitrix-best-practice-sql
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseBitrix Best Practice SQL
Bitrix SQL最佳实践
Скилл помогает понять, какие нужно использовать SQL/DB best practices.
Используй его только для задач, где есть работа с базой данных: схема, SQL-запросы, ORM-модели, выборки, запись, миграции данных, индексы, транзакции или другие DB-boundary решения.
本Skill可帮助你了解应采用哪些SQL/DB最佳实践。仅在涉及数据库操作的任务中使用它:schema、SQL查询、ORM模型、数据查询、写入、数据迁移、索引、事务或其他数据库边界相关方案。
Как использовать
使用方法
- Определи, действительно ли задача затрагивает SQL, ORM или хранение данных.
- Выдели конкретную DB-область задачи: чтение, запись, схема, миграция, производительность, консистентность или безопасность запроса.
- Открой только те rule-файлы, которые напрямую относятся к этой DB-области.
- Сначала следуй более строгим правилам репозитория и ограничениям модуля.
- Предпочитай framework-native и Bitrix-native паттерны работы с данными вместо самодельных SQL- и storage-абстракций.
- 确认任务是否确实涉及SQL、ORM或数据存储。
- 明确任务涉及的具体数据库领域:读取、写入、schema、迁移、性能、一致性或查询安全性。
- 仅打开与该数据库领域直接相关的规则文件。
- 优先遵循仓库的严格规则和模块限制。
- 优先使用框架原生和Bitrix原生的数据处理模式,而非自行构建的SQL和存储抽象。
Выбор rule-файла
规则文件选择
<!-- rules-dictionary:start -->
<!-- rules-dictionary:start -->
Когда читать rules/query-execution.md
rules/query-execution.md何时阅读 rules/query-execution.md
rules/query-execution.mdЧитай , если задача затрагивает хотя бы одну из этих областей:
rules/query-execution.md- ,
Bitrix\Main\Application::getConnection()илиBitrix\Main\DB\Connection;getSqlHelper() - ,
query(),queryScalar(),queryExecute(),add()илиaddMulti();Bitrix\Main\DB\Result - , placeholders
Bitrix\Main\DB\SqlExpression,?s,?i,?f,?#или ручную сборку SQL из частей;?@ - ,
SqlHelper::quote(),forSql(),prepareInsert(),prepareUpdate()илиconvertToDb*();getTopSql() - замену legacy /
$DBна D7 DB API;CDatabase - выбор между raw SQL через и более высокоуровневым framework-native DB path.
Connection
如果任务涉及以下任一领域,请阅读:
rules/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,?s,?i,?f,?#或手动拼接SQL片段;?@ - ,
SqlHelper::quote(),forSql(),prepareInsert(),prepareUpdate()或convertToDb*();getTopSql() - 将旧版 /
$DB替换为D7 DB API;CDatabase - 在通过执行原生SQL与使用更高级的框架原生数据库方案之间做选择。
Connection
Когда читать rules/orm-datamanager-map.md
rules/orm-datamanager-map.md何时阅读 rules/orm-datamanager-map.md
rules/orm-datamanager-map.mdЧитай , если задача затрагивает хотя бы одну из этих областей:
rules/orm-datamanager-map.md- класс ;
*Table extends Bitrix\Main\ORM\Data\DataManager - ,
getTableName(),getConnectionName(),getMap(),getUfId()илиpostInitialize();setDefaultScope() - описание полей через и наследников вместо legacy array map;
Bitrix\Main\ORM\Fields\Field - ,
Reference,OneToMany,ManyToMany,configureJoinType()именно на уровне декларации сущности;configureCascade*Policy() - primary key, autocomplete, validators, save/fetch modifiers, title и default values в entity map;
- выбор между typed field objects и старым массивом в .
getMap()
如果任务涉及以下任一领域,请阅读:
rules/orm-datamanager-map.md- 继承自 的
Bitrix\Main\ORM\Data\DataManager类;*Table - ,
getTableName(),getConnectionName(),getMap(),getUfId()或postInitialize();setDefaultScope() - 通过 及其子类描述字段,而非旧版数组映射;
Bitrix\Main\ORM\Fields\Field - 在实体声明层面使用 ,
Reference,OneToMany,ManyToMany,configureJoinType();configureCascade*Policy() - 实体映射中的主键、自动补全、验证器、保存/获取修饰符、标题和默认值;
- 在类型化字段对象与中的旧版数组之间做选择。
getMap()
Когда читать rules/orm-objectify.md
rules/orm-objectify.md何时阅读 rules/orm-objectify.md
rules/orm-objectify.mdЧитай , если задача затрагивает хотя бы одну из этих областей:
rules/orm-objectify.md- ,
Bitrix\Main\ORM\Objectify\EntityObject,Collection,createObject(),createCollection()илиwakeUpObject();wakeUpCollection() - ,
get(),require(),remindActual(),fill(),isFilled(),isChanged();collectValues() - работу с relation graph через ,
addTo(),removeFrom()или collection lifecycle;removeAll() - ,
Collection::walk(),filter(),find(),merge()илиhasByPrimary();getByPrimary() - выбор между Objectify-объектами и массивами результата;
- object state (,
RAW,ACTUAL,CHANGED) и in-memory поведение ORM.DELETED
如果任务涉及以下任一领域,请阅读:
rules/orm-objectify.md- ,
Bitrix\Main\ORM\Objectify\EntityObject,Collection,createObject(),createCollection()或wakeUpObject();wakeUpCollection() - ,
get(),require(),remindActual(),fill(),isFilled(),isChanged();collectValues() - 通过 ,
addTo(),removeFrom()或集合生命周期处理关系图;removeAll() - ,
Collection::walk(),filter(),find(),merge()或hasByPrimary();getByPrimary() - 在Objectify对象与结果数组之间做选择;
- 对象状态(,
RAW,ACTUAL,CHANGED)和ORM的内存内行为。DELETED
Когда читать rules/orm-query-filter.md
rules/orm-query-filter.md何时阅读 rules/orm-query-filter.md
rules/orm-query-filter.mdЧитай , если задача затрагивает хотя бы одну из этих областей:
rules/orm-query-filter.md- ,
DataManager::query(),getList(),getRow()илиgetByPrimary();getCount() - ,
Bitrix\Main\ORM\Query\Query,Query::filter(),ConditionTree,where*,having*или nested filters;logic() - ,
fetchObject(),fetchCollection(),fetch()и выбор между object fetch и массивами;fetchAll() - runtime fields, ,
registerRuntimeField(),Query::expr()в query-path;ExpressionField - ,
buildFilterSql(), private fields, aggregation/object-fetch restrictions;disableDataDoubling() - выбор между modern query builder и legacy filter array.
如果任务涉及以下任一领域,请阅读:
rules/orm-query-filter.md- ,
DataManager::query(),getList(),getRow()或getByPrimary();getCount() - ,
Bitrix\Main\ORM\Query\Query,Query::filter(),ConditionTree,where*,having*或嵌套过滤器;logic() - ,
fetchObject(),fetchCollection(),fetch()以及在对象获取与数组之间做选择;fetchAll() - 运行时字段、,
registerRuntimeField(), 查询路径中的Query::expr();ExpressionField - ,
buildFilterSql(), 私有字段、聚合/对象获取限制;disableDataDoubling() - 在现代查询构建器与旧版过滤器数组之间做选择。
Когда читать rules/orm-persistence-write.md
rules/orm-persistence-write.md何时阅读 rules/orm-persistence-write.md
rules/orm-persistence-write.mdЧитай , если задача затрагивает хотя бы одну из этих областей:
rules/orm-persistence-write.md- ,
DataManager::add(),update(),delete(),addMulti()или object/collectionupdateMulti();save() - ,
DeleteByFilterTrait::deleteByFilter()или low-level ORM write helpers;MergeTrait::merge() - ,
Bitrix\Main\ORM\Data\AddStrategy,InsertIgnore,Merge,MergeByDefaultTrait,InsertIgnoreByDefaultTraitилиAddMergeTrait;AddInsertIgnoreTrait - выбор между обычной ORM-записью, batch-операцией, merge/upsert и delete-by-filter;
- события ORM при записи, , cache cleanup и caveats batch persistence;
ignoreEvents - массовая запись или обновление нескольких строк через ORM lifecycle.
如果任务涉及以下任一领域,请阅读:
rules/orm-persistence-write.md- ,
DataManager::add(),update(),delete(),addMulti()或对象/集合的updateMulti();save() - ,
DeleteByFilterTrait::deleteByFilter()或底层ORM写入助手;MergeTrait::merge() - ,
Bitrix\Main\ORM\Data\AddStrategy,InsertIgnore,Merge,MergeByDefaultTrait,InsertIgnoreByDefaultTrait或AddMergeTrait;AddInsertIgnoreTrait - 在常规ORM写入、批量操作、merge/upsert和按过滤器删除之间做选择;
- 写入时的ORM事件、、缓存清理和批量持久化注意事项;
ignoreEvents - 通过ORM生命周期批量写入或更新多行数据。