
Sergey
23.03.2018
09:27:53
Как вариант это сделать асинхронно, но хочется понять нету ли точно другого пути

Andrey
23.03.2018
09:30:38

Борис
23.03.2018
09:31:23
Окей
> Каким образом можно стартануть новую транзакцию после флаша?
Новый $uow->flush() должен заново сохранить все измененные сущности. Если я правильно понял вопрос

Sergey
23.03.2018
09:55:59

Google

Sergey
23.03.2018
09:56:21
важный момент - не допусти рекурсию в этом месте. У меня это выход если небыло ни одного ивента.
в идеале конечно каждый твой листенер должен свой UoW иметь
но пока это проблематично сделать

Sergey
23.03.2018
10:00:21

Sergey
23.03.2018
10:00:53
потому повторюсь - в идеале у тебя должны быть отдельные UoW
ну и еще момент - когда у тебя сущность инициирует какое-то событие и эту сущность потом вторично меняют по событию, либо же когда одну и ту же сущность меняют разные листенеры - есть повод задуматься что что-то явно не так пошло
а вообще - если у тебя все это не закрыто одной большой транзакцией сверху, то есть смысл мувнуть все листенеры в отдельный процесс (через rabbitmq/zeromq pub/sub)

Sergey
23.03.2018
10:03:40

Serge
23.03.2018
11:46:27
всем привет. подскажите пжлст, меня или глючит и такая фича была, или я что-то выдумал. допустим у нас есть query builder или обычный findBy в репозитории и какая-то сущность, у которой объект имеет свойство $date с mapping type = "date"(не datetime). Если я делаю findBy(['date' => new DateTime()]), то мой объект DateTime должно преобразовать в строку с датой в формате Y-m-d которая потом попадёт в sql запрос?
или же findBy(['date' => (new DateTime())->format('Y-m-d')]) надо делать?

Vladislav
23.03.2018
11:48:23

Sergey
23.03.2018
11:48:29

Google

Vladislav
23.03.2018
11:48:30
но ты попробуй оба варианта и посмотри разницу

Serge
23.03.2018
11:48:49
я посмотрел логи. дата не преобразовывается
вместе со временем отправляется в мускуль

Petr
23.03.2018
11:52:17

Serge
23.03.2018
12:40:33

Michael
23.03.2018
14:22:58
чот приехал на другой проект и там Карбон повсеместно ипользуют и я вот чо не очень прочувствовал этот момент да не много синтаксического сахара но тащить зависимость
Или кто знает киллер фичу карбона?

Andrew
23.03.2018
14:29:45

Bohdan
23.03.2018
14:31:59
юзал карбон, переехал на chronos
то же самое, но иммутабельное
киллер фича - сравнение, да

Timur
23.03.2018
15:30:18
/link@yetanotherstatsbot

Yet Another Stats
23.03.2018
15:30:19
https://b.yasb.exileed.com/telegram/chat/1001091570538

Sergey
23.03.2018
16:42:35
https://dev.to/scottshipp/avoid-getters-and-setters-whenever-possible-c8m

Serge
23.03.2018
17:37:53
может кто знает, почему singleScalarResult в тестах может возвращать старое значение?
не актуальное в бд

Alan
23.03.2018
19:29:22
так наверное доступнее чем сразу говорить что они зло

Timur
23.03.2018
19:34:58
А как же языки с нестрогой типизацией? В PHP типа входящего параметра можно ограничить только сеттером:
public function setDate(DateTime $date) : void {
$this->date = $date;
}

f4rt~
23.03.2018
19:35:38

Timur
23.03.2018
19:35:50

Google

f4rt~
23.03.2018
19:36:28
я про "ограничить"

Alan
23.03.2018
19:36:35
почему только сеттером? а в конструкторе?)

f4rt~
23.03.2018
19:36:50
мне ничего не помешает, по хорошему вместо DateTime туда засунуть что я захочу

Timur
23.03.2018
19:37:27

Alan
23.03.2018
19:37:56
тайп хинты же везде куда можно засунуть ))
кроме паблик свойств

Timur
23.03.2018
19:39:42
почему только сеттером? а в конструкторе?)
А если я не задаю параметры через конструктор? Положим у меня сущость и 100 аттрибутов в ней, не буду же я 100 аргументов в конструктор пихать, надо помнить очередность, какие-то аргументы надо пропускать и т.д.

Alan
23.03.2018
19:40:18
можно бить на value object и группировать их
а почему 100 а не 1000 ?)

Sergey
23.03.2018
19:41:42

Alan
23.03.2018
19:42:15
а с сеттерами ты не забудешь их все заполнить?) их же 100 штук это 100 методов вызвать

Timur
23.03.2018
19:42:18
Решил ты значит такой сделать:
$article = new Article;
// Тут ты еще не знаешь, как статья называется, или еще чего-то не знаешь
// Делаешь кое-какие вычисления и...
$article->setDate('2007-01-01')
Тут PHP не даст тебе так сделать

Sergey
23.03.2018
19:42:50
какая разница

Timur
23.03.2018
19:43:16

Andrey
23.03.2018
19:43:29
Пятничный срачик. Наканецта

Alan
23.03.2018
19:43:34
это самая большая боль в разработке обычно на проектах?)
порядок аргументов?)

Sergey
23.03.2018
19:43:42

Andrey
23.03.2018
19:43:51
Жги

Google

Sergey
23.03.2018
19:44:06

Bohdan
23.03.2018
19:44:48

Andrey
23.03.2018
19:44:51

Admin
ERROR: S client not available

Sergey
23.03.2018
19:44:56
первые нифига не помогают разобраться что делать и редко отвечают на вопрос "нафига эта фича нужна и какую проблему решает", вторые обычно являются результатом херового планирования.
а сеттеры на этом фоне - это легкое покалывание...
90% если есть сеттеры то нет тестов) (хотя тут я манипулирую - просто 90% что тестов нет)))

Alan
23.03.2018
19:46:05
ахахах

Sergey
23.03.2018
19:46:32
юнит тестов точно не будет (честных изолированных) - и тут уже как раз таки потому что сеттеры и геттеры (хотя тоже скорее всего есть 10% из категории другое)
хорошо если будут интеграционные или e2e

Andrey
23.03.2018
19:50:29
@fes0r, я готов вернутся к давнему вопросу. Как с имутабельной сущностью не юзая persist заапдейтить сущность?

Sergey
23.03.2018
19:52:13
если ты хочешь заменять стэйт - юзай VO
там такая ситуация вполне корректна
дальше идет смешание понятий "сущность доктрины" и "сущность" как элемент декомпозиции систем.

Andrey
23.03.2018
19:53:12

Sergey
23.03.2018
19:53:31
ограничения твоей ORM которые просто не позволят делать красивую и чистую модель (ибо наследуют ограничения реляционной модели - одно только ограничение на отсутствие односторонней one-to-many ассоциации чего только стоит)
что тебе мешает сделать сущность с двумя полями - id и state?

Google

Andrey
23.03.2018
19:54:50
Лады. С версией я неудачно, наверн

Sergey
23.03.2018
19:54:54
и спокойно подменять стэйт
потом может быть еще рядом появятся поля "когда поменялся стэйт"
или, быть может - история изменения стэйта
как твои имутабельные сущности ложатся на identity map? новая должна "подменить" старую? и там где юзалась старая версия по ссылке волшебным образом должно все обновиться на новый инстанс?

Andrey
23.03.2018
19:56:41
Через 10 мин смогу нормально засесть. Попишу)

Sergey
23.03.2018
19:56:55

Timur
23.03.2018
19:57:47
Логичные имена. Давай об этом поговорим?
Что понятнее?
1)
$user = new User(
'alfred',
'hitchcock',
'13-08-1899',
'29-04-1980',
'178',
false,
true,
false,
User::TYPE_AUTHOR,
Land::USA
)
2)
$user = new User;
$user->setFirstname('Alfred')
->setLastname('Hitchcock')
->setBirthdate('13-08-1899')
->setDieddate('29-04-1980')
->setHeight('178')
->setIsModerated(true)
->setIsAlive(false)
->setType(User::TYPE_AUTHOR)
->setLand(Land::USA)
;

Sergey
23.03.2018
19:57:49
пока идешь - просто подумай в отрыве от "поменять сущность" - в простой ситуации когда эта сущность одна и никто ее не юзает - все будет хорошо и можно сделать так как ты предлагаешь (это будет даже вполне норм), но обычно все не так просто.

Andrey
23.03.2018
19:58:14
И плюс ide светит

Timur
23.03.2018
19:59:44
Плюс можно вызвать в любой части кода
Плюс можно пропускать что хочешь