DevCraft Документации
Гайды

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 / offsetint

INSERT / UPDATE / DELETE

Пишутся через QueryBuilderDataLoaderService::insert / ::update / ::delete.

  • insert() — payload в withValues(); после записи reload по primaryKey (default id) → созданная строка.
  • 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(), группы, категории.

См. также

На этой странице