These are chat archives for PHPixie/Hotline

2nd
Nov 2015
bobdubnod
@bobdubnod
Nov 02 2015 13:22

Уезжал и вернулся. Всем привет!))

И сразу вопрос такой: я хочу сделать TRUNCATE таблице в базе данных MySQL. Как можно это сделать?
И еще каким образом можно выполнять прямые запросы в БД? Не нашел, к сожалению. Только sqlExpression, формирующую часть запроса, но не сам запрос или его выполнение.

@dracony пока нет возможности прислать адрес, я тут в переездах. :) Позже как все норм будет - и там уж если будет возможность, конечно, но если не будет, то не будет.
Vadim Meling
@Linfuby
Nov 02 2015 13:32

Прямые запросы выполняются через компонент database

$database = $builder->components()->database()->get();
$query = $database->selectQuery();
$query->table('products');
$result = $query->execute();

На счет Truncate думаю тоже можно найти там же где и selectQuery()

bobdubnod
@bobdubnod
Nov 02 2015 13:37
Там не нашел, к сожалению.) Там только insertQuery, deleteQuery и т.п. Не зная названия метода тоже сложно искать в сурсах.
Roman Tsiupa
@dracony
Nov 02 2015 13:49
tut
@bobdubnod
$connection = $database->get();
$connection->execute("truncate table users");
mozhno s parametrami
$connection->execute("select * from users where id = ?", array(3));
bobdubnod
@bobdubnod
Nov 02 2015 14:00
О, отлично, спасибо!

Только с параметрами не работает.

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''contact_groups'' at line 1

$this->connection->execute("TRUNCATE ?", array('contact_groups'));
Roman Tsiupa
@dracony
Nov 02 2015 14:03
potomu chto imja tablicy ne parametr
=)
eto ne ja pridumal
tak prepared statements rabotajut
parametry eto pri update, insert i Where
itd
no ne chasti sintaksisa
Kostya
@KokaUA
Nov 02 2015 16:43
@dracony Подумываю отложить создание более расширение скелета проекта, по сути он не особо и отличается от оригинала. Пожалуй лучше сделать наоборот, небольшой скелет, для проектов с более меньшим маштабом. За основу взять фреймворк, но не использовать бандлы. Что на эту тему думаешь?
Roman Tsiupa
@dracony
Nov 02 2015 16:47
так я же уже сделал проект без бандлов
Kostya
@KokaUA
Nov 02 2015 16:56
Ну я помню, я имел ввиду чутка допилить его. Сразу внедрить авторизацию и примитивный acl хоть.
Грубо говоря что-бы был более быстрый старт для простеньких сайтов.
Roman Tsiupa
@dracony
Nov 02 2015 16:59
авторизация там есть
он ведь тоже на пиксе
только структура проекта другая)
Kostya
@KokaUA
Nov 02 2015 17:00
Не не я про реализацию взаимодействия с пользователем. Процессоры к примеру что-бы были готовы, проверка и тому подобное
Roman Tsiupa
@dracony
Nov 02 2015 17:00
ааа
понял)
ну я с радостью поддержываю идею =)
Kostya
@KokaUA
Nov 02 2015 17:02
Просто бандл с одним процессором как-то уж слишком убого смотрится). А грузить туда еще что-то не совсем верно. При этом помню мне пикси2 как раз за минимализм понравилась.
Kostya
@KokaUA
Nov 02 2015 17:10
Вот хотел посоветоваться, как лучше тестировать контролеры (процессоры)? Желательно что-бы туда еще передавать кастомный database что-бы можно было и протестировать взаимодействие с бд.
Roman Tsiupa
@dracony
Nov 02 2015 17:28
ну та все стандартно
делаешь мок
и вперед
щас пример сикну какой-тл
ммм вот
класс
тест
пример показательный
попробуй просто начать по аналогии
и если что спрашывай)
Kostya
@KokaUA
Nov 02 2015 17:33
Что-то не понятно где конфиги бд поредаются.
Kostya
@KokaUA
Nov 02 2015 17:38
Вот смотри к примеру процессор. В процессор мы передаем билдер, это в нем нужно мокнуть database() что-бы он вернул нам нужное подключение.
Орм тогда подхватит с билдера процессора подключение, или и орм мокать нужно?
Или же мокнуть orm()?
По сути мне бы что-бы в тестах работало или с тестовой бд или с мемори
Roman Tsiupa
@dracony
Nov 02 2015 20:17
kakije konfigy?
так мок далеш
или ты хочешь на реальной БД?
еслли мокать
то мокаешь билдер
мокаеш орм
и все дальше тоже мокаеш
если с реальной бд
то мокаешь билдер
строишь реальный Database с конфигом с массива
$dbConfig = $this->slice->arrayData($this->databaseConfigData);
$datbase = \PHPixie\Database($dbConfig);
и используя его строишь ОРМ
моку билдера говоришь чтобы он возвращал вот этот построенный ОРМ
понятнее?
Roman Tsiupa
@dracony
Nov 02 2015 20:22
или пример написать
?
Kostya
@KokaUA
Nov 02 2015 20:22
Да понятно)
Это и хотел уточнить. Получается в setUp строем свой орм куда нужно подключается, а в тесте просто в билдере orm() мокаем на нашу.
Получается или мокать полностью орм, или делать protected метод в моделе/процессоре для получения к примеру репозитория, и подменять данные что он возвращает.
Roman Tsiupa
@dracony
Nov 02 2015 20:26
Тут проблема чуток в том
что ті собираешся делать с другими компонентами
мокать или нет
Kostya
@KokaUA
Nov 02 2015 20:27
Получается что все зависимости процессора нужно мокать.
Roman Tsiupa
@dracony
Nov 02 2015 20:27
можно хитро сделать
$framework = new \Project\Framework();
$frameworkBuilder  = $framework->builder();

// hod konjem
$config = $frameworkBuilder->assets()->config();
$config->set('database', $newParams);

$processor = new \Your\Processor($frameworkBuilder);
tipa podmenitj konfig
pered pervym obraschenijem k orm
тогда поучаеться без моков
но на другой базе
Kostya
@KokaUA
Nov 02 2015 20:32
По идее хорошая идея, главное что-бы процессор коректно запустился.
А потом в тестах просто все экшены дергнуть с нужными реквест параметрами, ну и посмотреть что вернет.
Roman Tsiupa
@dracony
Nov 02 2015 20:34
ну если дергать екшны
Kostya
@KokaUA
Nov 02 2015 20:34
А вообще в идеале было бы не плохо что-бы фреймворк сам мог определять как себя запускать, продакшен/дев/тестинг
Roman Tsiupa
@dracony
Nov 02 2015 20:34
то это просто
$framework->processHttpServerRequest($request);
где $request можно построить с компонента хттп
$request = $http->messages()->serverRequest(...);
насчет определять
тут разве что с разной папки конфиги читать
Kostya
@KokaUA
Nov 02 2015 20:39
Ну или префикс/суфикс к конфигам которые определяются какой-то переменной среды.
А вообще это все делается элементарно и самому. Создаем еще два конфига, проверяем к примеру ip если локальный то мержим основной конфиг с локальным и возвращаем
Другой вопрос на щет того что-бы при запуске тестов хватало отдельный конфиг. К примеру не включало кеширование и использовало тестовую базу данных. Ну это у уже так мечты)
Roman Tsiupa
@dracony
Nov 02 2015 20:43
ммм ну кофиги ж пхп
всегда можно
'stuff' => $_ENV['stuff']
и библиотеку dotenv прикрутить
она $_ENV наполняет данными с файла
Kostya
@KokaUA
Nov 02 2015 20:47
Ладно будим пробовать. Там в процессе уже будит проще понять).
Roman Tsiupa
@dracony
Nov 02 2015 20:47
ugu =) там в процесе гораздо проще чем на пальцах
Kostya
@KokaUA
Nov 02 2015 20:48
Угу в итоге прикрутить кодесепшин и не парится)
С функциональными тестами в смысле
Roman Tsiupa
@dracony
Nov 02 2015 21:08
угу)
можно и без если сильно захотеть
Kostya
@KokaUA
Nov 02 2015 21:55
Ну это да. Но зачем хотеть, если уже есть проще.
Roman Tsiupa
@dracony
Nov 02 2015 22:13
ну например если запрос вручную строить и вызывать обработку без апача то если будет ексепшн сразу увидишь
имхо тут надо пробовать поб сеья как больше нрпавится)
Kostya
@KokaUA
Nov 02 2015 22:40
Ну буду эксперементировать с тем что-бы с тестов просто запускать экшины.