Юра
Вон enum тебе
Рома
такой синтаксис не работает в postgres
Vlad
У тебя сам енам контролирует инвариант
Vlad
Зачем оно в бд?
Юра
Зачем оно в бд?
Иногда всё-таки люди делают запросы руками
Юра
Например миграции какие-то
Юра
И как-то спокойнее когда там енам
Михаил
У тебя сам енам контролирует инвариант
На тот момент когда не будет контролировать
Vlad
На тот момент когда не будет контролировать
Ну вот не надо создавать таких ситуаций
Vlad
Ок, зачем тогда енам на уровни пыхи? раз бд следит за этим
Михаил
Ну вот не надо создавать таких ситуаций
Из разряда: Если болеешь не болей
Михаил
Ок, зачем тогда енам на уровни пыхи? раз бд следит за этим
Ну если у ты задаешь такие вопросы, то наверное просто нужно попробовать использовать
Nikolay
Не возникало ни разу проблем без енамов в бд
Михаил
Ну давайте пойдём дальше: Зачем нужны тесты? Зачем нужны проверки на инварианты в логике? Зачем нужно ооп?
Михаил
Что попробовать ? Сделать 2 constraint?
Да, один констрейнт работает на момент приёма данных от пользователя и принятия решений Второй констрейнт со стороны бд работает на момент записи. Так как бд - это стейт приложения, то оно должно уметь хранить валидные данные. Ты сделаешь одну ошибку, забудешь проверить тип в рантайме, и будешь расплачиваться за это тем, что во время считывания данных будешь отваливаться. Возможно даже войдёшь в бесконечный цикл. Ну и ещё я написал что enum это отсортированный сет, и по нему можно искать. Допустим это сет статусов и ты можешь найти все остальные статусы, следующие за определённым. Ну и сортировать по нему. Плюс он весит меньше.
Михаил
К слову, раз уж мы тут начали сыпать абсурдом. Как вы храните в своей постгрес имена, email, пароли. Короче короткие постоянно заполненные данные? Varchar(n) или text ?
Юра
Та не, вариант просто не делай так никогда не канает
Юра
Это работает до первого случая когда это не сработает
Юра
Иначе можно прийти к логике зачем форин ключи если можно просто не создавать ситуации когда они не консистентны, зачем транзакции когда можно просто не создавать ситуации и т.д.
Михаил
Не имеет значения )
А как ты хранишь если не имеет значения?
The Ant
А как ты хранишь если не имеет значения?
Если предполагается короткое значение - варчар, если длинное - текст. Но внутри бд это займет одинаковое кол-во памяти. Поэтому не важно.
Vlad
Это работает до первого случая когда это не сработает
Хорошо, переверну вопрос. Почему core team этого не сделала нативно?
The Ant
То есть ты всё таки за констрейнты на уровне колонки?
Это скорее подсказка себе, чего ты там ожидаешь
Владимир
Если предполагается короткое значение - варчар, если длинное - текст. Но внутри бд это займет одинаковое кол-во памяти. Поэтому не важно.
Если мне память не изменяет, что в мускуле с индексами на text проблема Но это не точно, надо проверить
The Ant
Если мне память не изменяет, что в мускуле с индексами на text проблема Но это не точно, надо проверить
Только если длина текста превышает порог некоторый. По дефолту чето около 740байт. Остальное обрезается (в индексе)
Михаил
Только если длина текста превышает порог некоторый. По дефолту чето около 740байт. Остальное обрезается (в индексе)
Да кстати, помогли мне вспомнить минус текста У меня тоже была проблема что через какое-то время бд отказывалась вставлять значения из-за того что размер индекса превышен
The Ant
В мускле и енамы опасно юзать, там могут быть скрытые джойны, которые тебе запросы посадят на порядки по времени выполнения...
Михаил
Хорошо, переверну вопрос. Почему core team этого не сделала нативно?
Хорошо, давай и я переверну вопрос. А postgres пользуется только программисты на симфони? А как же другие фреймворки и япы? Почему мне нужно ограничивать в возможности … себя ограничивать? Разве абстракции и языки это не про ограничения? Я не чувствую себя глупо 2 раза перепроверяя себя. Уж лучше я по факту вставки получу исключение, чем буду ловить неправильное поведения из-за [какие-то причины по которым кто-то или что-то записали неверное значение в бд]
Михаил
Покажи мне орм где это из коробки реализовано
Это твой аргумент? "Раз умные дяденьки это не сделали - значит это и не надо"?
Vlad
Это ты с этого начал))) не я))
Михаил
Ещё один слабый аргумент
Vlad
Мой аргумент приложение должно быть единым источником знаний. Твои аргументы работают когда бардак в система, тогда да нужна дубина.
Михаил
1) Дополнительные проверки - это не про бардак в системе. Ну или киньте в меня камень кто не делал логических ошибок! 2) Мне нравится как ты игнорируешь ещё 2 бенефита которые приносят с собой enum
Vlad
Я их не игнорю, чуть позже отвечу
Рома
подскажите есть ли функционал генерации фейковой записи как в ларавел для тестирования
Рома
symfony fixtures аналог laravel factory?
Рома
да в тестах это можно использовать или только через команду?
Рома
https://dev.to/jszutkowski/using-fixtures-in-testing-symfony-application-47n2
Михаил
DoctrineFixturesBundle это вроде просто способ создания и получения тестовых записей, а вот какими именно ты данными заполнишь - это up to you. Я использую fakerphp
Рома
$stmtService = app(StmtService::class); $stmt = Stmt::factory()->create(); $model = $stmtService->findById($stmt->id); $this->assertSame($model->id, $stmt->id); аналог можно сделать тестам на laravel?
Рома
$this->createMock(NewsRepositoryInterface::class) вообще много кто пользуется таким подходм на практике?
Михаил
$this->createMock(NewsRepositoryInterface::class) вообще много кто пользуется таким подходм на практике?
Я уже боюсь высказывать своё мнение, а то вдруг позор, но да - если это юнит тест
Михаил
Хотя это самообман чистой воды мокать репозитории
Рома
а у нас на laravel делали через фабрики фейковой модели и проверяли реальную запись в тестовой бд или статус запроса
Михаил
а у нас на laravel делали через фабрики фейковой модели и проверяли реальную запись в тестовой бд или статус запроса
Но это уже не совсем юнит тест, так как существует зависимость от внешнего ресурса
Рома
может быть faker не входит в рекомендацию symfony просто
Михаил
Если это функциональный тест, то никто не мокает репозитории и коннекшоны в целом
Рома
зачем так делать? я предполагаю что фикстуры это аналог seed laravel, не лучше ли фейковые данные генерировать внутри фабрики?
Михаил
А вообще видел либу, там можно было фисктуры объявлять в ямл файле и там фейкер был встроенный. Ктонить помнит название?
Михаил
Блин, ребят кто читает сообщения сразу как только их отправили, вы хоть спите?
Dmitriy
так будете же
Рома
кто может подсказать? roman@roman-MaiBook-M:~/tests/fix/proc_apps_symfony$ php bin/phpunit Cannot load Xdebug - it was already loaded Xdebug: [Log Files] File '/var/log/nginx/xdebug.log' could not be opened. Xdebug: [Step Debug] Could not connect to debugging client. Tried: 127.0.0.1:9003 (through xdebug.client_host/xdebug.client_port). PHPUnit 11.0.9 by Sebastian Bergmann and contributors. Runtime: PHP 8.2.17 Configuration: /home/roman/tests/fix/proc_apps_symfony/phpunit.xml.dist F 1 / 1 (100%) Time: 00:00.006, Memory: 8.00 MB There was 1 PHPUnit test runner warning: 1) Test results may not be as expected because the XML configuration file did not pass validation: Line 10: - Element 'phpunit', attribute 'convertDeprecationsToExceptions': The attribute 'convertDeprecationsToExceptions' is not allowed. Line 26: - Element 'coverage', attribute 'processUncoveredFiles': The attribute 'processUncoveredFiles' is not allowed. Line 27: - Element 'include': This element is not expected. Line 32: - Element 'listeners': This element is not expected. -- symfony 7 "phpunit/phpunit": "^11.0", "symfony/browser-kit": "7.0.*", "symfony/css-selector": "7.0.*", "symfony/maker-bundle": "^1.57", "symfony/phpunit-bridge": "^7.0"
Рома
устанавливаю symfony/test-pack , а он не работает прелесть работы с symfony)
Dmitriy
вы не готовы (с)
Nikolay
То есть прям в репе написано 6.1 / 6.2 в зависимостях вижу 7.0 - странно что не работает да?:)
Nikolay
учитывая что в symfony выпилили phpunit-bridge вообще
Nikolay
учитывая что в symfony выпилили phpunit-bridge вообще
Херню ляпнул, там чисто из бинов по моему и нативный запуск phpunit
Рома
так есть возможность запустить рhpunit в 7 версии?
Рома
как починить?
Рома
хах
Nikolay
и сделай миграцию конфига
Nikolay
./vendor/bin/phpunit --migrate-configuration
Рома
та же ошибка
Рома
php composer_2_7_2.phar require --dev phpunit/phpunit ^10 -W