
Sergey
30.01.2017
19:09:56
и в целом проще взять готовый пакет какой (https://github.com/Ocramius/GeneratedHydrator)
и внутри репозитория гидрироать/дегидрировать сущности

da horsie
30.01.2017
19:11:59
любопытно
спасибо

Google

da horsie
30.01.2017
19:12:46
а чем плох мой способ?

Sergey
30.01.2017
19:13:06
1. тупой бойлерплейт
2. сущность теперь знает как она сохраняется в базе

da horsie
30.01.2017
19:13:20
не знает
и почему в базе?
ничего про базу нету

Sergey
30.01.2017
19:13:31
сущность <репозиторий> мэппер

da horsie
30.01.2017
19:13:52
она знает как себя превратить в дто и обратно
почему это плохо?

Aleh
30.01.2017
19:14:01
проблема только в бойлерплейте

Sergey
30.01.2017
19:14:05
или Money какой

Aleh
30.01.2017
19:14:10
и что это прям в публичной зоне

Sergey
30.01.2017
19:14:12
или еще чего

Google

Aleh
30.01.2017
19:14:25
гидрация обычно скрыта где-то глубоко

da horsie
30.01.2017
19:14:28

Aleh
30.01.2017
19:14:34
и нельзя просто взять и создать объект с определенным стейтом

Sergey
30.01.2017
19:14:43

da horsie
30.01.2017
19:14:55
какие связи?

Sergey
30.01.2017
19:15:01
связи между объектами

Aleh
30.01.2017
19:15:02
между сущностями

Sergey
30.01.2017
19:15:04
static function fromSaved(array $state) {
$me = new self:
$me->myProp = $state['prop'];
return $me;
}

Богдан
30.01.2017
19:15:10
Такой вопрос
Я не особо шарю в бд пока
У меня есть таблица с приложениями, и таблица downloads, при нажатии на donwload я пишу в таблицу downloads id юзера, id приложения и время
Мне нужно выводить количество скачиваний для каждого приложения
К примеру скачиваний 1000000 всего. И как лучше сделать:
писать в таблицу downloads и добавить колонку count_downloads в таблицу с приложениями, и ее тоже при скачивании на 1 увеличивать, или все таки получать для приложения через select count(*) from downloads, и как это будет если на странице 50 приложений, получается 50 запросов при каждом обновлении страницы
И вот только что подумал - нет возможности, чтобы сервер бд сам заполнял колонку count_downloads по id приложения?

Sergey
30.01.2017
19:15:17
при таком подходе у тебя конструктор будет вызываться больше одного раза на жизненный цикл сущности

Aleh
30.01.2017
19:15:49

Sergey
30.01.2017
19:16:02
сущность становится.... просто DTO между приложенькой и базой

Aleh
30.01.2017
19:16:16
нуу хз, если ты там сайд-эффектишь, от сам виноват
а если нет, то потом стейт перетрется
так что)

Sergey
30.01.2017
19:16:32
я в конструкторе много чего могу делать
выставлять начальный стэйт сущности например

Aleh
30.01.2017
19:16:44
ну так потом перетрется ж
стейтом из базы

Google

Sergey
30.01.2017
19:17:01
ну тут уже бойлерплейт

Aleh
30.01.2017
19:17:13
да, это есть)

Sergey
30.01.2017
19:17:17
короч гидраторы
и не париться

Aleh
30.01.2017
19:17:27
одобряю

Богдан
30.01.2017
19:17:35
Я вообще вас не понимаю((

Sergey
30.01.2017
19:18:06
@nicecoder пиши процедурки/тригера. Ну или в коде тупо инкремент поля делай
последнее лучше

Богдан
30.01.2017
19:18:53
То есть это норм? 2 запроса будет
Я просто почему то реально думал, что сервер может сам заполнять эту колонку для каждого приложения количеством скачиваний по id приложения

da horsie
30.01.2017
19:18:54

Aleh
30.01.2017
19:19:44
будет дергаться конструктор

Aleh
30.01.2017
19:19:56
при этом объект на самом деле не умирал

da horsie
30.01.2017
19:20:07

Aleh
30.01.2017
19:20:13
это пыхо-проблемы

da horsie
30.01.2017
19:20:16
это статик метод

Aleh
30.01.2017
19:20:20
объект умирает когда удаляется из базы

da horsie
30.01.2017
19:20:36
ах это

Aleh
30.01.2017
19:20:42
объект пользователя с точки зрения домена существует с момента создания до момента удаления

da horsie
30.01.2017
19:20:49
понял

Google

Aleh
30.01.2017
19:20:58
создание = конструктор, удаление = деструктор
на создание может вешаться какое-то хитрое поле

da horsie
30.01.2017
19:21:09
и как же гидратор эту проблему решит?

Aleh
30.01.2017
19:21:33
class A extends YourClass {
public function __constructor() { }
}
вуаля

Sergey
30.01.2017
19:21:41
вообще-то намного проще

Aleh
30.01.2017
19:21:57
ну там рефлексии всякие, но это лобовой вариант

Sergey
30.01.2017
19:22:32
$reflection = new \ReflectionClass(User::class);
$user = $reflection->newInstanceWithoutConstructor();

Aleh
30.01.2017
19:23:03
это для слабаков

da horsie
30.01.2017
19:23:05
понял

Admin
ERROR: S client not available

Sergey
30.01.2017
19:23:21
я сломал твой способ

Aleh
30.01.2017
19:23:37
?

da horsie
30.01.2017
19:24:17
а в случае с гидратором кто отвечает за связи?

Sergey
30.01.2017
19:24:19
не ну понятно что доктринка тож сломается
ну то есть...
$this->friends->add($user);
а оно внутри уже трекает связи

Google

Aleh
30.01.2017
19:25:11
есть ж обратные

Sergey
30.01.2017
19:25:11
или если ты попросил - запомнит что надо в базу сохранить например

Aleh
30.01.2017
19:25:14
там тогда просто поле

Sergey
30.01.2017
19:25:23
ну вот тут уже unit of work
делает diff
ну то есть тут уже просто сэтится значение гидратором
или достается
а что с ним делать решают другие штуки

Aleh
30.01.2017
19:25:53
да, строит граф, потом по нему поиском в глубину строит последовательность и ее дергает

Sergey
30.01.2017
19:26:06
дерг дерг

da horsie
30.01.2017
19:26:31
? спасибо

Sergey
30.01.2017
19:26:32
@f3ath короч если ты вдруг вздумал написать свою ORM - это сложно и надолго

Aleh
30.01.2017
19:26:39
и не получится
протечет

Sergey
30.01.2017
19:26:58

da horsie
30.01.2017
19:26:59
я хочу понять, почему не стоит писать свою ОРМ не пытаясь ее реально написать

Aleh
30.01.2017
19:27:21

Sergey
30.01.2017
19:27:46

Aleh
30.01.2017
19:27:55

da horsie
30.01.2017
19:29:09
ну причина обычно такая "ууу, лень разбираться, нафигачу свой костыль"

Aleh
30.01.2017
19:29:13
ы

da horsie
30.01.2017
19:29:17
потом костыль оборачивается проблемами
хочется знать, какими именно