Konstantin
Konstantin
вас бросает из стороны в сторону.. с одной сайты визитки, с другой дикий хайлоад в петабайт
середина, на мой вкус, должна стремиться к хайлоаду. по крайней мере в подходах. потому что когда она выстрелит, переделывать правильно будет некогда. вам буквально ничего не стоит (кроме пары часов времени) раскидать разные куски проекта по поддоменам, примерно столько же как и по префиксам. только в будущем это, случись успех проекта, создаст много проблем
Konstantin
заложить некое пространство для роста или гипотетическую будущую оптимизацию почти никогда не сложно
Konstantin
типа того, ага. три server со своими тривиальными локациями куда лучше и поддерживаемее
Aleksander
Aleksander
Всем привет!
Не так давно был разговор: https://t.me/symfony_ru/47590
Если кому интересно, вот что имелось ввиду:
Пример на скрине выше
На выходе bin/console doctrine:schema:update --dump-sql:
CREATE TABLE amodel (id SERIAL NOT NULL, c1 VARCHAR(255) DEFAULT '' NOT NULL, PRIMARY KEY(id));
CREATE TABLE bmodel_id (a_model_id INT NOT NULL, id SMALLINT NOT NULL DEFAULT 0, PRIMARY KEY(a_model_id));
CREATE TABLE bmodel (id SMALLINT NOT NULL, a_model_id INT NOT NULL, c1 VARCHAR(255) DEFAULT '' NOT NULL, PRIMARY KEY(a_model_id, id));
CREATE INDEX IDX_E5498A366C13E111 ON bmodel (a_model_id);
ALTER TABLE bmodel_id ADD CONSTRAINT FK_bmodel_id_amodel FOREIGN KEY (a_model_id) REFERENCES amodel (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE;
CREATE FUNCTION bmodel_next_id(INT) RETURNS SMALLINT LANGUAGE plpgsql AS $$
DECLARE
next_id SMALLINT;
BEGIN
IF ($1 IS NULL) THEN RETURN NULL; END IF;
UPDATE bmodel_id SET id = id + 1 WHERE a_model_id = $1 RETURNING id INTO next_id;
IF NOT FOUND THEN
INSERT INTO bmodel_id VALUES ($1, 1) RETURNING value INTO next_id;
END IF;
RETURN next_id;
END
;$$;
CREATE FUNCTION bmodel_before_insert_set_id() RETURNS trigger LANGUAGE plpgsql AS $$
BEGIN
NEW.id = bmodel_next_id(NEW.a_model_id);
END
;$$;
CREATE TRIGGER _000_bmodel_before_insert_set_id BEFORE INSERT ON bmodel FOR EACH ROW EXECUTE PROCEDURE bmodel_before_insert_set_id();
ALTER TABLE bmodel ADD CONSTRAINT FK_E5498A366C13E111 FOREIGN KEY (a_model_id) REFERENCES amodel (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE;
Победил лишь тем что переопределил PostgreSQLPlatform(а именно, его getCreateTableSQL). Если кто-то знает лучшее место
"воткнуться" со своим SQL - буду рад любым советам.
Спасибо!
Konstantin
ужас :)
Aleksander
да вот, тоже переживаю, насколько всё это нормально)
Konstantin
я бы точно такое в прод не потащил :)
Konstantin
если бы то же самое кодом делалось, ну еще может быть - код читается лучше, его можно ревьюить, тесты писать, рефакторить. вот этот ddl всего этого не умеет
Konstantin
особо не вчитывался, но почему не set default your_func() ?
Konstantin
чуть меньше сущностей, чуть прозрачнее флоу чем триггер
Konstantin
а, справедливо
Aleksander
если бы то же самое кодом делалось, ну еще может быть - код читается лучше, его можно ревьюить, тесты писать, рефакторить. вот этот ddl всего этого не умеет
ну я ж не собираюсь бизнес логику на DDL пилить)
но, с другой стороны, почему не использовать фишки Postgres'а? более того, какие то вещи из уровня движка БД я бы не хотел реализовывать(и тестировать) в коде - мы же не пишем тесты на пхп для БД функций, serial, constrains, etc
Konstantin
да это вечный холивар, тут нет единственно правильного ответа. просто триггер это некоторая магическая херня, которая срабатывает непрозрачно для вызывающего. можно норм времени убить в дебаге "ну что за сволочь сюда значение вставляет" и до триггера дойти на третий день)
Aleksander
то есть, это вещи, которые программисту вообще "не видны" должны быть, имхо... чтобы он не смог их сломать... ну а то что SQL говно написать можно, так это волков бояться - в лес не ходить... имхо, на пхп больше вероятность нагадить, если логику БД писать
Konstantin
плюс оно перформанс пенальти дает некоторый, я не скажу насколько большой в актуальных постгресах, но он точно есть
Aleksander
Aleksander
Konstantin
пхп масштабируется почти линейно, база - нет
Aleksander
это не понял)
Konstantin
ну в пхп всегда можно серверов докинуть, а сервер бд один
Konstantin
и если большая нагрузка на запись, с сервером бд особо ничего не сделаешь
Aleksander
а, ну это... ну, тут как бы пхп ровно тот же SQL будет выполнять, так что в данном случае серверу БД легче не будет же
Konstantin
да не, я на самом деле не то чтобы критикую ваше решение, вполне имеет право на жизнь. просто дополнительные точки зрения накидываю
Aleksander
вообще, я может старпёр) никак не могу смириться с тем чтобы использовать большие строковые айдишки-хеши, да при этом еще отказаться от составных PK и тд...
Yuriy
Всем привет!
В 5 версии симфони для PSR7 можно было подключить symfony/psr-http-message-bridge. В 6 версии оно не работает.
Если ServerRequestInterface можно подключить через DI с laminas-diactoros, то в контроллере через имплементацию RequestHandlerInterface симфони кидает ошибку:
The controller must return a "Symfony\Component\HttpFoundation\Response" object but it returned an object of type Laminas\Diactoros\Response\HtmlResponse
Может кто знает, где можно изменить эту зависимость?
Maxim
Добрый день, столкнулся со следующей проблемой.
Есть 2 энтити, которые связаны между собой Many-To-Many. Для одной из этих энтити есть форма Symfony. При создании новой формы (передаче пустой Entity в форму) все корректно отрабатывает и создается. Однако при редактировании уже сущестующей энтити, выбранные чекбоксы не отображаются.
Maxim
Maxim
The Ant
Тупой вопрос.
как вот это в комментариях записать в атрибуты, чтобы десериалайзер вложенные объекты понимал? Через атрибуты в данном случае не понимает, тока с @var Tag[] разбирает адекватно.
доку всю перевернул уже, не нашол.
Nikolay
The Ant
в доке чето есть про это
The Ant
ноя чот не понял как )
Konstantin
сериалайзер очень магический компонент, там хер разберешься без поллитры
Konstantin
я бы пошел спросил на гитхабе у них
Denis
Там возможно Tag нужно взять из другого неймспейса, для атрибутов
Konstantin
вопрос, кстати, не тупой, а очень хороший, если найдете ответ - не поленитесь, напишите его сюда, очень полезно будет
Denis
Konstantin
вот это @var не сериалайзер парсит, ща, я вспоминаю
Konstantin
короче, нашел. https://github.com/symfony/symfony/issues/39356
Konstantin
судя по этому багу (мы как раз его собрали и очень весело дебажили), этот функционал лежит где-то в транзитивных зависимостях serializer-pack
Konstantin
судя по названиям (код пока не смотрю)
Konstantin
это лежит где-то в
phpdocumentor/reflection-docblock: *
phpstan/phpdoc-parser:
значит, можно поискать в этих репозиториях упоминания аттрибутов
Konstantin
документации к обоим либам нет 🙂
The Ant
https://github.com/symfony/symfony/issues/46092
Крч грекас сказал своё фи и послал желающих подальше.
Anton
Konstantin
грекас, конечно, интересный чувак, вроде кор-девелопер, полезные штуки делает. но, сука, такой, во-первых, тупой, во-вторых, такой говнокод пишет, что аж плохо становится
Konstantin
я почти всегда уверен, что стоф или грекас завернут даже самую полезную и классную идею. просто потому что
Kirill
грекас, конечно, интересный чувак, вроде кор-девелопер, полезные штуки делает. но, сука, такой, во-первых, тупой, во-вторых, такой говнокод пишет, что аж плохо становится
А можешь поделиться историей "тупости"?
Kirill
Я с ним только по одной иссушке знаком
Konstantin
сложно прям конкретный пример привести, это общее впечатление общения с ним за 10 лет
Konstantin
или сколько он там)
Юра
Я не погял
Юра
Они сказали что аттрибуты не мейнстрим или как?
Юра
Konstantin
особенно в опенсорсе, они прям сука соревнуются кто больше классных идей зарубит. это прям хорошо по тому же прометеусу видно, доктрине, симфони
Юра
Ну значит бандл надо написать
Юра
Если им можно расширить функциональность
Юра
Если нет, ну значит реально фишка без которой можно жить
Юра
Хотя я так понял проблема в том что аттрибутами нельзя описать массив энтитей?
Konstantin
ага
Konstantin
там супер-магическое неявное трактование
Konstantin
если есть @var Foo[] - то в в массив сущностей, если нету - в массив массивов
Юра
Ну пхп могучий язык
Юра
В котором в тайпхинт нельзя написать Tag[]
Konstantin
у нас оно смешно сломалось на проде, при этом локально все работало потому что локально кто-то принес транзитивно нужную либу, а в проде - нет
Konstantin
покрыло бы 90% юзкейсов среднего пхп-девелопера
Konstantin
хотя без никитоса щас вообще без женериков останемся
Gleb
А можете, пожалуйста, объяснить мне (наверное тупому)))).
Сегодня треть дня ловил почему не находит мапы доктрина.
причина была здесь
use Doctrine\Orm\Mapping as ORM;
^^^ недоглядел и по табу дополнилось строчными буквами.
Но у меня вопрос, тогда получается невалдиный namespace, но ошибки не было. Только доктрина не видела маппинг.
Почему не вывалилось ошибки?
Konstantin
пользуйтесь правильными иде, они подсветят :)
Gleb
Gleb
даже предупреждений не было