Гайды
DataLoader и QueryBuilder v200.4.0
Загрузка и запись строк DLE через static DataLoaderService: массив или QueryBuilder.
Зачем: не писать $db->super_query / сырой SQL для простых SELECT / INSERT / UPDATE / DELETE. DataLoaderService — static-фасад с кешем на чтение; QueryBuilder собирает аргументы через #[With] / #[WithItem].
Dual accept (SELECT)
DataLoaderService::loadData() / ::loadOne() принимают массив или QueryBuilder:
use DevCraft\Builders\QueryBuilder;
use DevCraft\Core\Enums\SortDirection;
use DevCraft\Core\Support\DataLoaderService;
use DevCraft\Core\Support\DleDataService;
DataLoaderService::loadData([
'table' => 'users',
'columns' => ['user_id', 'name'],
'conditions' => ['user_id' => 1],
'order' => ['name' => 'ASC'],
'limit' => 1,
]);
QueryBuilder::create('users')
->withColumns(['user_id', 'name'])
->withConditionsItem('user_id', 1)
->withOrderItem('name', SortDirection::Asc)
->withLimit(1)
->first();
// высокоуровнево
$user = DleDataService::user(id: 1);Ключи args (SELECT)
| Ключ | Смысл |
|---|---|
table | Таблица без PREFIX/USERPREFIX |
columns | Список колонок (опционально) |
conditions | поле => значение или ['op' => '=', 'value' => …] |
order | поле => ASC|DESC (или SortDirection) |
limit / offset | int |
INSERT / UPDATE / DELETE
Пишутся через QueryBuilder → DataLoaderService::insert / ::update / ::delete.
insert()— payload вwithValues(); после записи reload поprimaryKey(defaultid) → созданная строка.update()—withValues()+withConditions…; после UPDATE возвращаются все строки по conditions.delete()— толькоwithConditions…; без conditions не выполняется; возвращаетbool.- Инкременты SQL:
new Fragment('pm_all+1')в values.
use Cycle\Database\Injection\Fragment;
use DevCraft\Builders\QueryBuilder;
QueryBuilder::create('pm')
->withValues(['subj' => $subject, 'text' => $body, 'user' => $userId, 'folder' => 'inbox'])
->insert();
QueryBuilder::create('users')
->withValues([
'pm_all' => new Fragment('pm_all+1'),
'pm_unread' => new Fragment('pm_unread+1'),
])
->withConditionsItem('user_id', $userId)
->update();
QueryBuilder::create('tags')
->withConditionsItem('news_id', $newsId)
->delete();Когда не нужен super_query
Для одной таблицы с conditions/order/limit — QueryBuilder + DataLoaderService::…. Готовые обёртки: DleDataService::user(), users(), группы, категории.