L!MP, это имеется. Использовал шаблоны Компоновщик и Интерпретатор. Конечно есть свои ограничения (все таки полноценный анализатор лучше, но жирнее), в общем работает достаточно хорошо. Я постараюсь завтра записать небольшое видео на эту тему, если интересует, а пока можешь глянуть в пакет PPHP\patterns\database\query, там и находится унификатор.
L!MP, Я сейчас работаю над документацией )) Недавно закончил генератор документации, сейчас как раз пишу примеры и пользовательскую часть.
# Delphinum (25.08.2013 / 00:33)
L!MP, Я сейчас работаю над документацией ))
Ты уже пол года над ней работаешь
Воодушевленный темой написал фабрику объектных SQL инструкций. Приведу пример использования:
// DELETE people WHERE `name` = "ivan" OR (`id` > "5" AND `id` < "20")
echo Delete::getInstance()->table('people')->where('name', '=', 'ivan')->create('id', '>', '5')->andC('id', '<', '20')->last('OR')->interpretation('oci'); // Диалект Oracle DB
Достаточно ли понятно, нужно ли что то поправить?
Delphinum, группировка условий не очевидна.
Глядя на вот это:
->create('id', '>', '5')->andC('id', '<', '20')->last('OR')
сразу и не догодаешься что оно должно сгенерировать вот это:
OR (`id` > "5" AND `id` < "20")
Для создания сложных, вложенных условий, более очевидного интерфейса не придумал.
Delphinum, не много многословно, но всё же:
Delete::getInstance()
->table('people')
->where('name', '=', 'ivan')
->orWhere(function ($qb) {
$qb->where('id', '>', '5');
$qb->where('id', '<', '20');
})
->interpretation('oci')
Delphinum, логика and по умолчанию. Т.е
->where()->where() = cond AND cond,
->where()->orWhere() = cond OR cond