
Sergey
02.12.2017
16:12:30
это удобно потому что не нужен сложный процесс гидрации + модель данных слабо влияет на объектную модель
и дата мэппер в этом плане больше ограничений, хотя все они обходятся

Dmitry
02.12.2017
16:13:42

Sergey
02.12.2017
16:14:05

Google

Sergey
02.12.2017
16:14:18
он по сути для этого и придуман)
а вот операции на запись когда много связанных данных - тут есть нюансы

Dmitry
02.12.2017
16:14:30

Sergey
02.12.2017
16:14:59

Dmitry
02.12.2017
16:15:13
зато удобно с ними работать :)

Sergey
02.12.2017
16:15:19
когда у тебя вместо 2-3-х запросов будет 600

Dmitry
02.12.2017
16:16:09

Sergey
02.12.2017
16:16:16
я вот пробовал и так и эдак, и могу сказать что и там и там свои плюсы и минусы. Но репорты делать через ORM ты меня не заставишь. Это боль и ужас.
повторюсь - ORM нужны ТОЛЬКО для операций записи. На операциях чтения они по большому счету бесполезны. Какой-нибудь AR к слову тут хорошо заходит, потому он и популярен

Dmitry
02.12.2017
16:17:12
еще как делал :) Но нафреймах пока не приходилось. Но я думаю понимаю когда лучше не оспользовать ORM

Sergey
02.12.2017
16:18:07
под "операцией записи" я пожалуй подразумеваю все что относится к изменению стэйта приложения

Google

Dmitry
02.12.2017
16:18:15
но в простых операция AR оч удобно. Order->with(['products'])->get() Чистенько

Sergey
02.12.2017
16:18:26
AR это когда у тебя результат мэпится на тот самый Order
а удобненький квери билдер с поддержкой скоупов и релейшенов - этого валом

Dmitry
02.12.2017
16:19:09
но результат то мы получаем AR

Sergey
02.12.2017
16:19:37

Sergey
02.12.2017
16:20:06
а потом людям CQRS продают и plain sql

Dmitry
02.12.2017
16:20:36
Но в чем тогда AR, если все квери билдер?
даже save там квери билдер Order::create($data)

Антон
02.12.2017
16:21:16
Ручками писать все это уходит больше времени

Sergey
02.12.2017
16:21:17
ты создал ряд и сохранил его - это AR
хотя... тут спорно

Dmitry
02.12.2017
16:22:24

Sergey
02.12.2017
16:22:24
оберток мало что-ли что бы превратить вывод постов в блоге в 2 строчки кода?

Антон
02.12.2017
16:22:52
Ну вот ты делаешь коммерческий проект с обычными крудами. Почему все хватают фреймворк? Быстрее
Так можно вообще все писать с нуля каждый раз

Google

Sergey
02.12.2017
16:23:08
не просто результат select, а результат select, который был замэплен на объекты (по ряду на объект), который умеет изменять этот ряд в базе

Dmitry
02.12.2017
16:23:08
да
тогда вообще не понятно чет от RowGateway отличается

Антон
02.12.2017
16:23:22
И будет академично при желании

Dmitry
02.12.2017
16:23:44

Sergey
02.12.2017
16:23:49

Антон
02.12.2017
16:24:14
Но найди сейчас хоть одну вакансию где нужно руками писать без орм и фреймворка?
Или цмс

Arky
02.12.2017
16:24:28

Sergey
02.12.2017
16:24:32
тебе пока надо научиться exit не использовать в коде

Антон
02.12.2017
16:25:01
Чтобы узнать что это и использовать

Sergey
02.12.2017
16:25:35

Антон
02.12.2017
16:25:54
Ты плотник. Знаешь рубанок. Не знаешь шлифовальную машину. Используй всегда рубанок

Sergey
02.12.2017
16:26:07

Антон
02.12.2017
16:26:29
Так как он узнает unit of work?

Sergey
02.12.2017
16:26:33
плотники это челики которые на вротпрессах пишут

Dmitry
02.12.2017
16:26:38

Arky
02.12.2017
16:26:40

Sergey
02.12.2017
16:26:52

Google

Dmitry
02.12.2017
16:27:08

Sergey
02.12.2017
16:27:15
ну вот узнал ты о доктрине. И даже не потрутидлся почитать документацию где в самом начале написано что такое unit of work

Dmitry
02.12.2017
16:27:15
судя по всему

Антон
02.12.2017
16:27:28
Он говорит вам что знает SQL и использует. Вы ему говорите не используй orm

Sergey
02.12.2017
16:27:30

Антон
02.12.2017
16:27:38
А он видимо хочет познать что это

Vladislav
02.12.2017
16:27:40
?

Arky
02.12.2017
16:28:09

Admin
ERROR: S client not available

Sergey
02.12.2017
16:28:12
попробуй дословно перевести Unit of work - как ты думаешь что это? Люди даже этого не могут
я тебе там комментов добавил

Arky
02.12.2017
16:29:19

Dmitry
02.12.2017
16:29:23

Arky
02.12.2017
16:30:29

Sergey
02.12.2017
16:30:42

Vladislav
02.12.2017
16:30:50
немного не так обьяснил
Doctrine will iterate over the Identity Map and for each object compares the original property and association values with the values that are currently set on the object. If changes are detected then the object is queued for a SQL UPDATE operation

Sergey
02.12.2017
16:30:54

Google

Антон
02.12.2017
16:31:06
Unit of work - паттерн. Суть управлять изменениями, и решать проблемы когда есть конкурентность при записи?

Sergey
02.12.2017
16:31:32

Vladislav
02.12.2017
16:31:35
разве он решает это?

Антон
02.12.2017
16:31:41
Переводится как единица работы

Vladislav
02.12.2017
16:31:58
да, а как с конкаренси оно поможет?
никак
оно просто срванивает что поменялось и что нужно сделать в бд
условно

Антон
02.12.2017
16:32:46
Ну видимо да. Он отследит что изменение было не раз и решит что возможно в каком то изменении нет нужды
И оптимально изменит данные

Vladislav
02.12.2017
16:33:25
я ща не понял тебя

Антон
02.12.2017
16:34:37
Ну объект User. Кто то заменил имя. Потом где то изменилось имя. UoF два раза изменит имя пользователя?

Sergey
02.12.2017
16:34:41

Антон
02.12.2017
16:35:38
С телефона просто. Не могу код писать

Vladislav
02.12.2017
16:36:05

Sergey
02.12.2017
16:36:06

Vladislav
02.12.2017
16:36:11
до этого оно ничего не считает

Антон
02.12.2017
16:36:41
Sergey User->setName вызвали два раза. И изменили имя по разному. Оба изменения будут произведены?

Vladislav
02.12.2017
16:36:51
это даже я с доки помню, whenever you call 'flush' uow будет делать шототам :)))

Sergey
02.12.2017
16:36:55

Антон
02.12.2017
16:37:12
Ну вот я это и назвал конкуренцией