Konstantin
если это запрос через DQL/QueryBuilder - то должно быть всё в порядке, тк они этот каст в/из бинарного представления в себе скрывают (собственно для того и нужны)
Павел
Павел
Павел
Жаль что нельзя у симфони типа указать как генерить
The Ant
Павел
Павел
Ну или что там придется
Konstantin
всё, я понял проблему: речь вообще не про уид-генератор, просто вместе с либами идет какая-то интеграция с доктриной, которую он заюзал. нет никакого обязательного правила, заставляющего это юзать
Павел
Павел
The Ant
Мрак
а датувремя кастишь? или отдаешь как есть? я вот привожу в нормальный вид по исо
The Ant
тоже дичь выходит
Павел
Плюс выходит еще больше на uuid компоненте завязка
The Ant
ну функцию написать
Konstantin
могу посоветовать написать свой тайп всё же, это строчек 20 с импортами
Konstantin
назвать его uud_text например
The Ant
чем это поможет на чтении?
Konstantin
там два метода реализовать
Konstantin
тем что у него в базе будет не binary(16) а char(36)
Konstantin
то есть храниться будет строковое представление, да, а не бинарное
The Ant
так можно сразу стринг сделать, чо мучаться? )
Павел
Да проще тогда text guid и не париться))
Павел
Павел
Павел
Я просто чет вот особо тоже не пойму профита между VO общим одним для id и стрингой
Konstantin
то есть когда идет инсерт, доктрина заноет "не могу объект ууида в строку загнать". и обратно - чтобы из строки в поле сущности загнать инстанс UUID, а не строку
Павел
Konstantin
тогда нужен custom id generator, который сгенерит криптографически-верный ууид, но отдаст его строкой, а не объектом
Павел
Konstantin
бля
Konstantin
минуту, я код пишу с демонстрацией
The Ant
напиши функцию uuidb2s и всё )
Konstantin
берем пример из доки
Konstantin
class Product
{
/**
* @ORM\Id
* @ORM\Column(type="uuid", unique=true)
* @ORM\GeneratedValue(strategy="CUSTOM")
* @ORM\CustomIdGenerator(class=UuidV4Generator::class)
*/
private string $id;
}
$p = new Product();
$em->persist($p);
$em->flush();
выполняем его и получаем ошибку: все генераторы (в частности UuidV4Generator) вернут не строчку, а инстанс уида этого несчастного
Павел
Konstantin
поэтому нам нужен такой генератор, который сделает всё то же самое, ток в конце вернет return $uuid->toString() (сейчас там просто return $uuid)
Konstantin
Я генерю снаружи
тогда я вообще не понимаю за каким дьяволом вы пишете type="guid" а не type="string", length=36
Konstantin
оно же вам никаких абсолютно плюсов не даёт, о чем мы тогда тут час трём, если задача не стоит выеденного яйца?
Павел
Игорь
Павел
Konstantin
зачем вам там во, если вы везде собираетесь оперировать стрингами? и если вы все равно руками делаете setUuid($uuid) - что мещает сделать setUuid($uuid->toString()) ?
Konstantin
ну либо таки тайп uuid_text напишите и будет счастье, там реально 20 строчек и 10 минут
The Ant
а как по мне лучче кастить в строку на отдачу. Один хер делаешь каст всё остальное в требуемое
Konstantin
с одной стороны да, с другой чем больше типов - тем лучше
Konstantin
твой замечательный долбоколлега не врубится и засунет тебе вместо уида "123", ведь тайп-хинт просто просит строку (а какую именно - не говорит)
Konstantin
а у тебя потом всё падать будет потому что 123 в виде уида никак представить нельзя
Magzhan
Добрый день, коллеги.
хочется сразу в конструктор писать не используя setUser
Vlad
client это сервис?
Magzhan
Да
Magzhan
Vlad
https://stackoverflow.com/a/7682827
Иван
не надо так делать
код должен быть готов к неумиранию
Vlad
Иван
это просто разные степени долженствования
Иван
текущий юзер - это не зависимость, а контекст
Nikolay
Иван
а так надо передавать аргументом
Konstantin
и не делать setUser
Nikolay
Konstantin
Konstantin
современный способ https://symfony.com/blog/new-in-symfony-5-2-controller-argument-attributes
Vlad
так ето работает в экшене)
Konstantin
ну а сервис ничего не должен знать про сессии, юзеров и прочее. ему какую сущность дали - он такой и воспользовался
Иван
сервис может консьюмером вызываться и работать из под разных юзеров
конечно может быть так, что этот сервис так не вызывается
но стоит приучить себя писать все сервисы одинаково
Иван
а #[CurrentUser] $user = null оставлять только в вебовских контроллерах
Konstantin
в консюмере точно сложно понять кто "текущий юзер"
Иван
Konstantin
не, это понятно