These are chat archives for PHPixie/Hotline

25th
Nov 2015
Vadim Meling
@Linfuby
Nov 25 2015 13:27

@dracony А как отловить ошибку выполнения в database? Такая конструкция возвращает всегда true

        try {
            $this->builder->connection()->beginTransaction();
            $this->builder->connection()->execute('ALTER TABLE `keyword_positions` CHANGE COLUMN `keyword_id` `keyword_id` INT(11) NULL DEFAULT NULL COMMENT 'Ключевая фраза' AFTER `id`, DROP FOREIGN KEY `FK_keyword_positions_keywords`, ADD CONSTRAINT `FK_keyword_positions_keywords` FOREIGN KEY (`keyword_id`) REFERENCES `keywords` (`id`) ON UPDATE CASCADE ON DELETE SET NULL;');
            $this->builder->connection()->commitTransaction();

            return true;
        } catch (\Exception $e) {
            $this->builder->connection()->rollbackTransaction();

            return $e->getMessage();
        }

Хотя MySQL возвращает ошибку:
/ Ошибка SQL (1005): Can't create table 'parishop_pixie.#sql-15cc_11' (errno: 121) Duplicate key on write or update /

Roman Tsiupa
@dracony
Nov 25 2015 13:28
tut
хм
а можно трейс?
Vadim Meling
@Linfuby
Nov 25 2015 13:32

В трейсе нет инфы

#0 D:\var\www\admin\data\www\phpixie.parishop\bundles\admin\src\Parishop\Admin\HTTPProcessors\Migrate.php:58

PHPixie\Debug::trace()

#1 D:\var\www\admin\data\www\phpixie.parishop\vendor\phpixie\processors\src\PHPixie\Processors\Processor\Actions.php:15

Parishop\Admin\HTTPProcessors\Migrate->migrateAction(Request)
Roman Tsiupa
@dracony
Nov 25 2015 13:32
нет я имел ввиду в трейсе експершна
или ексепшна нет?
Vadim Meling
@Linfuby
Nov 25 2015 13:33
Так в том то и дело, что нет exception
А сам connection не имеет что-то типа errors()?
Roman Tsiupa
@dracony
Nov 25 2015 13:33
da net
scha
a gde ty uvidel etu oshybku?
zapustil rukami zapros?
Vadim Meling
@Linfuby
Nov 25 2015 13:35

Самое интересное, что в Базу запрос попадает и не возвращает ROLLBACK
START TRANSACTION
ALTER TABLE keyword_positions CHANGE COLUMN keyword_id keyword_id INT(11) NULL DEFAULT NULL COMMENT 'Ключевая фраза' AFTER id, DROP FOREIGN KEY FK_keyword_positions_keywords, ADD CONSTRAINT FK_keyword_positions_keywords FOREIGN KEY (keyword_id) REFERENCES keywords (id) ON UPDATE CASCADE ON DELETE SET NULL;
COMMIT

Ошибку вижу в HeigiSQL при выполнении запроса вручную

Roman Tsiupa
@dracony
Nov 25 2015 13:35
ponjal
a esli bez tranzakcyji
?
Vadim Meling
@Linfuby
Nov 25 2015 13:36
Тоже нет Exception
Roman Tsiupa
@dracony
Nov 25 2015 13:37
pdo i mysql?
Vadim Meling
@Linfuby
Nov 25 2015 13:37
Да.
Проверить легко. Достаточно создать индекс на поле, а потом таким запросом попробовать добавить foreign key на это же поле. Mysql ругнется, но exception не вернет
Roman Tsiupa
@dracony
Nov 25 2015 13:38
mozhesh skinutj sql?
ja togda sejchas poprobuju
Vadim Meling
@Linfuby
Nov 25 2015 13:42
DROP TABLE IF EXISTS `keyword_positions`;
CREATE TABLE IF NOT EXISTS `keyword_positions` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `keyword_id` int(11) DEFAULT NULL COMMENT 'Ключевая фраза',
  `yandex_region_id` int(11) DEFAULT NULL,
  `position_yandex` int(11) DEFAULT NULL COMMENT 'Позиция в Яндекс',
  `position_google` int(11) DEFAULT NULL COMMENT 'Позиция в Google',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Дата/Время создания',
  `modified` datetime DEFAULT NULL COMMENT 'Дата/Время изменения',
  PRIMARY KEY (`id`),
  KEY `FK_keyword_positions_keywords` (`keyword_id`),
  KEY `FK_keyword_positions_yandex_regions` (`yandex_region_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

-- Дамп данных таблицы parishop_pixie.keyword_positions: ~6 rows (приблизительно)
DELETE FROM `keyword_positions`;
/*!40000 ALTER TABLE `keyword_positions` DISABLE KEYS */;
INSERT INTO `keyword_positions` (`id`, `keyword_id`, `yandex_region_id`, `position_yandex`, `position_google`, `created`, `modified`) VALUES
    (1, 1, 240, 80, NULL, '2015-11-10 12:22:49', NULL),
    (2, 1, 240, 45, NULL, '2015-11-09 12:14:42', NULL),
    (3, 1, 240, 35, NULL, '2015-11-08 12:14:52', NULL),
    (4, 1, 240, 25, NULL, '2015-11-07 12:14:56', NULL),
    (5, 1, 240, 15, NULL, '2015-11-06 12:15:05', NULL),
    (6, 1, 240, 5, NULL, '2015-11-05 12:15:07', NULL);
/*!40000 ALTER TABLE `keyword_positions` ENABLE KEYS */;
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
Запрос
ALTER TABLE `keyword_positions` CHANGE COLUMN `yandex_region_id` `yandex_region_id` INT(11) NULL DEFAULT NULL COMMENT 'Яндекс.Регионы' AFTER `keyword_id`, DROP FOREIGN KEY `FK_keyword_positions_yandex_regions`, ADD CONSTRAINT `FK_keyword_positions_yandex_regions` FOREIGN KEY (`yandex_region_id`) REFERENCES `yandex_regions` (`id`) ON UPDATE CASCADE ON DELETE SET NULL;
Roman Tsiupa
@dracony
Nov 25 2015 13:42
pasjab
Roman Tsiupa
@dracony
Nov 25 2015 13:50
<?php

require 'vendor/autoload.php';

$slice = new \PHPixie\Slice();
$database = new \PHPixie\Database($slice->arrayData(array(
    'default' => array(
    'driver'     => 'pdo',

        //MySQL
        'connection' => 'mysql:host=localhost;dbname=db',
        'user'       => 'd',
        'password' => 'd'
    )
)));

$database->get()->execute("ALTER TABLE `keyword_positions` CHANGE COLUMN `yandex_region_id` `yandex_region_id` INT(11) NULL DEFAULT NULL COMMENT 'Яндекс.Регионы' AFTER `keyword_id`, DROP FOREIGN KEY `FK_keyword_positions_yandex_regions`, ADD CONSTRAINT `FK_keyword_positions_yandex_regions` FOREIGN KEY (`yandex_region_id`) REFERENCES `yandex_regions` (`id`) ON UPDATE CASCADE ON DELETE SET NULL");
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1005 Can't create table 'db.#sql-b92_38' (errno: 150)' in /home/vagrant/db/vendor/phpixie/database/src/PHPixie/Database/Driver/PDO/Connection.php on line 44

PDOException: SQLSTATE[HY000]: General error: 1005 Can't create table 'db.#sql-b92_38' (errno: 150) in /home/vagrant/db/vendor/phpixie/database/src/PHPixie/Database/Driver/PDO/Connection.php on line 44

Call Stack:
    0.0002     227120   1. {main}() /home/vagrant/db/t.php:0
    0.0078     573504   2. PHPixie\Database\Driver\PDO\Connection->execute() /home/vagrant/db/t.php:17
    0.0078     575128   3. PDOStatement->execute() /home/vagrant/db/vendor/phpixie/database/src/PHPixie/Database/Driver/PDO/Connection.php:44
работает
есть эксепшн
Roman Tsiupa
@dracony
Nov 25 2015 14:00
значит у тебя где-то он прпадает уже позже
попробуй может где-то напрямую вызвать свой класс где делеаеться этот alter
и посмотреть будует там или нет
Roman Tsiupa
@dracony
Nov 25 2015 14:28
i kak?
chto-to nashlosj?
Vadim Meling
@Linfuby
Nov 25 2015 16:52
Смогу проверить только завтра (на работе). Дома у меня другой проект на PHPixie :)
Roman Tsiupa
@dracony
Nov 25 2015 16:54
=)
Vadim Meling
@Linfuby
Nov 25 2015 16:57
Например есть пожелание создать во framework абстрактный класс Builder который будет сожержать в себе функцию instance чтобы создавая собственные Builder's можно было просто наследовать этот класс (Сейчас я такой класс делаю в каждом проекте).
Причем даже не в каждом проекте, а в каждом бандле.
Roman Tsiupa
@dracony
Nov 25 2015 17:06
хорошая идея
правда не знаю куда его засунуть
в бандл модет?
Kostya
@KokaUA
Nov 25 2015 18:01
Не думаю что в бандл, ведь билдеры используются во всем фреймворке. Скорее отдельный пакет.
Roman Tsiupa
@dracony
Nov 25 2015 19:50
tam vsgp 5 strok koda
=(
Kostya
@KokaUA
Nov 25 2015 20:50
@dracony Ну строк то 5, а вот используются в каждой либе. По сути или отдельно, или прикрутить к slice, все равно везде используется
Roman Tsiupa
@dracony
Nov 25 2015 21:06
кстати помнишь я говорил что у меня тут друг есть которому PHP фрилансеров надо
так и не решился?
Igor Cheledinov
@chilic
Nov 25 2015 21:07
какой уровень разработчиков нужен?
насколько это постоянная работа?
Roman Tsiupa
@dracony
Nov 25 2015 21:09
ну как минимум средний
он просто фрилансер у которого иногда слишком много заказов
а говорить "нет" заказчикам не хочется
так что проще кому-то передать
Igor Cheledinov
@chilic
Nov 25 2015 21:15
@dracony у меня есть пару фирм которым можно сливать заказы
Roman Tsiupa
@dracony
Nov 25 2015 21:16
ну у него не такие уж большие, иногда на вечер просто
с фирмами надо наверное более стабильный поток
Igor Cheledinov
@chilic
Nov 25 2015 21:16
желательно
bambrillo
@bambrillo
Nov 25 2015 21:24
Привет! Простите, что вклиниваюсь…
Сижу с дилеммой. На купленом хостинге DocumentRoot нацелен на папку ~/public_html и нет возможности поменять этот параметр на ~/public_html/web. Теоретически можно создать всё "рабочее окружение" в папке ~/, а где-то в настройках phpixie подменить "web" на "public_html". Можно ли так сделать с точки зрения phpixie? За плечами один собранный проект на базе phpixie версии 2.0 (для локальной сети предприятия). Попробовал на этом же хостинге поставить 3.0. После этапа копирования файлов composer'ом запустить не удалось — тут дело очень тёмное, поэтому решил опробовать что-то знакомое, но столкнулся с таким препядствием.
Roman Tsiupa
@dracony
Nov 25 2015 21:25
перенеси все с папки /web/ в корень
точнее
создай проект в ~/public_html
перенаси все с папки ~/public_html/web в ~/public_html/
в index.php подправь
__DIR__.'/../vendor/autoload.php' -> __DIR__.'/vendor/autoload.php'
и все
bambrillo
@bambrillo
Nov 25 2015 21:37
Большое Спасибо! )
Roman Tsiupa
@dracony
Nov 25 2015 21:40
=)