Иван
Konstantin
не, я понимаю. и?
The Ant
не, я понимаю. и?
и, если значение может быть нуллом, значит это надо отразить в коде.
Konstantin
не, я понимаю. и?
вот так оно всё равно стрельнет, если у незафлашенной сущности getId позвать - потому что поле нуллом не проинициализировано. то есть ошибка один хер останется, если позвать getId до сохранения
Konstantin
а вот что нуллабельный геттер наружу торчит - это точно идиотизм, ведь теперь нулл-чекер везде будет орать что getId может нулл вернуть
Konstantin
и везде придется либо suppress-ить этот ворнинг, либо писать постоянные дебильные проверки на нулл
Vlad
Vlad
The Ant
Сэкономить строчку в конструкторе? )
Иван
Vlad
а потом добавится спецификатор readonly твой сет в проперти не будет работать)
Иван
readonly в рантайме не нужен
readonly нужен при статанализе и надо просто не использовать магию
Иван
Vlad
The Ant
а почему он должен?
чтобы экономить время программиста на чтение и проставление дефолтных нуллов
The Ant
The Ant
я ща про инъекции всякие
Vlad
The Ant
и кстати, доктрине на реадонли кладет, постестил уже
The Ant
можно смело юзать для всяких крейтед_ат и идов
Vlad
ну только есть один нюанс с проксями)
Konstantin
с точки зрения программиста - да, хочется чтобы все типы имели начальное значение и инициализировались неявно. но учитывая что никто так не делает, есть в этом какая-то логика
Vlad
ну так не указывайте типы и будет по дефолту нулл)
Konstantin
insertable: false,
updatable: false,
generated: 'INSERT',
Vlad
Vlad
Юра
Тут все правильно
Юра
В чем вопрос
Konstantin
typed property сильно отличается от обычных
Konstantin
нет смысла сравнивать реализацию (или использовать untyped)
Konstantin
<?php
class X {
private ?int $foo;
}
var_dump(new X);
////
object(X)#1 (0) {
["foo":"X":private]=>
uninitialized(?int)
}
Konstantin
видишь, тут появился специальный флаг "инициализировано"
Павел
Приветствую. Вопрос symfony uuid компоненту, он генерирует binary поле в БД. В принципе вроде как лучше по сравнению с varchar. Но как более менее адекватно приводить к стрингу на чтении? BIN_TO_UUID - ну не очень каждый раз такое писать в raw sql
Konstantin
много записей в этой таблице ожидается?
Konstantin
define много - десятки миллионов?
Павел
Павел
А как влияет на задачу?
Konstantin
просто если нет, я бы посоветовал не заниматься микрооптимизациями, а юзать варчар и не париться
Konstantin
вот это как хранит, не смотрели? https://symfony.com/blog/new-in-symfony-5-2-doctrine-types-for-uuid-and-ulid
Павел
Konstantin
энивей нужен кастомный тип доктрины
Konstantin
либо свой, либо встроенный. а он уже за собой скроет детали реализации, типа упаковку/распаковку
Иван
и что именно при чтении надо конвертировать?
чтобы в sql операции над строками проводить?
Konstantin
видимо чтобы туда-сюда касты не писать. но для этого кастом тайп и нужен
Павел
Konstantin
Konstantin
в доктрине в смысле, в сущности
Иван
а каким образом оно в json попадает?
Павел
Павел
Павел
просто обычный select запрос через connection, он возвращает binary, ну и падет потом responseJson
Павел
где то в глубине)
Konstantin
а, тут ничего не поделать, в ручных запросах надо каст писать руками
Konstantin
как за вас pdo должно догадаться, что вот конкретно это бинарное поле вы хотите видеть в каком-то текстовом представлении?
Павел
Херобора на пустом месте :(
Konstantin
так я и говорю, используйте варчар, пока это не станет проблемой, потом поменяете
Павел
Павел
Konstantin
не поможет свой тип, когда вы пишете raw sql (я же правильно понял?) доктрина не участвует в процессе вообще
Павел
Konstantin
блин, генератор уидов никак не должен быть связан с типом поля
Konstantin
рамси просто генерит строчку, обернутую в VO, он ничего не знает ни про базы, ни про доктрины, ни про что вообще
Konstantin
возьмите вон по ссылке выше способ описания через кастом ид генератор
Павел
Павел
guid вроде "спасает" (upd нет :( )
Konstantin
теперь еще раз: "обычный select запрос через connection" - речь про native sql query отсюда? https://www.doctrine-project.org/projects/doctrine-orm/en/2.9/reference/native-sql.html
Konstantin
не через DQL/QueryBuilder?
Konstantin
если ответ "да, это сырой запрос через обертку над PDOConnection" - то тип доктрины никак не спасет, она "не видит" что там внутри сырых запросов. и там нужно явно руками писать каст так же, как если бы вы селектили в консоли psql или датагрипе