
Sergey
08.03.2017
19:31:12
такое себе удовольствие

Timur
08.03.2017
19:32:07
Не сделает, если запросы правильно написать

Sergey
08.03.2017
19:32:24
ну тебе придется везде тулить этот джоин
даже если он не нужен

Google

Timur
08.03.2017
19:33:15
Джоин то делать придется, но чувак волнуется, что из-за этих джоинов производительность упадет, в чем я очень сомневаюсь

Yuriy
08.03.2017
19:33:58
если брать одного пользователя то может как то обойдется, но в моем проекте будет очень много закрученых выборок, типа сколько заказов сделал менеджер, с выбокрой всех товаров
а если сюда добавить описаное Сергеем я совсем запаниковал

Sergey
08.03.2017
19:35:10
ну ты вот подумай что ты будешь делать если тебе нужно будет чтобы менеджер мог быть кастомером

Timur
08.03.2017
19:38:09

Sergey
08.03.2017
19:39:38

Timur
08.03.2017
19:40:15

Yuriy
08.03.2017
19:42:49

Timur
08.03.2017
19:53:47
В первом варианте вообще ни о чем задумываться не надо. Есть таблица и там все пользователи.
После некоторых "исследований" в интернете, пришли к выводу, что не так уж это и страшно иметь полупустую таблицу и уже было решили так и поступить, забыть о всех этих джоинах и костылях, но специфика нашей задачи нас все же склонила ко второму варианту


Sergey
08.03.2017
19:58:07
полупустую иметь не очень ок. особенно для гидратора доктрины

Timur
08.03.2017
19:58:30

Google

Sergey
08.03.2017
19:59:05
ты делаешь выборку на 100 записей, у тебя в таблице 10 полей или 50 полей. что отработает быстрее?
а если не 100 записей, а больше?

Timur
08.03.2017
20:00:53
а если не 100 записей, а больше?
Этими вопросами я и задавался, когда гуглил. Искал всякие статистики.
Да, отвечая на твой вопрос, естественно если 10 полей, будет быстрее. Но насколько быстрее? На 100 наносекунд? И стоят ли эти 100 наносекунд твоего красноглазия?

Sergey
08.03.2017
20:01:18
поверь это далеко не 100 наносекунд

Timur
08.03.2017
20:01:31
Не поверю. Пруфы давай или истории из жизни)

Sergey
08.03.2017
20:01:43
http://ocramius.github.io/blog/doctrine-orm-optimization-hydration/
похожий кейс

Alan
08.03.2017
20:02:07
чет мне кажется в большинстве случаев играть будет роль не прирост а затраты на разработку дальнейшую и масштабирование такой денормализованной бд
хотя если уверен и осознанно то и в денормализации ниче плохого нет

Timur
08.03.2017
20:03:56

Sergey
08.03.2017
20:07:06
100х10 = 1к итераций против 100х100 - 10к итераций на гидрацию
как минимум если у тебя будет только User отвечающий за несколько типов, у тебя повсюду будут проверки в духе if(!$user->isCustomer()){...}, хотя можно было б явно задавать тип и будет поменьше мусора и шансов на ошибку
бенчмарк позже сделаю

Sergey
08.03.2017
20:08:35
иначе "админ" был бы просто ролью пользователя

Timur
08.03.2017
20:09:33
и это такой пользователь

Yuriy
08.03.2017
20:16:23
Sergey Protko
а можно узнать твое мнение,
рознести админов от юзеров по разным таблицам или использовать одну связующуя как было предложено ранее?

Jerry
08.03.2017
21:40:00
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html

Sergey
08.03.2017
22:29:27

Google

Sergey
08.03.2017
22:29:53

Big_Shark
08.03.2017
22:30:08

Sergey
08.03.2017
22:30:52

Big_Shark
08.03.2017
22:31:43

Sergey
08.03.2017
22:32:15

Big_Shark
08.03.2017
22:34:17

Jerry
08.03.2017
22:34:22
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html это как раз то что нужно человеку

Sergey
08.03.2017
22:34:37
точнее даже не так.... всегда старайся избегать наследования
настолько насколько можно
в контексте сущностей оно хорошо ложится на ситуации когда есть одни и те же данные но нужно разное поведение
это как по мне весьма редкий кейс

Big_Shark
08.03.2017
22:36:23

Sergey
08.03.2017
22:43:49
Зависит от задачи
у тебя либо есть задачи где это надо (и как по мне они редки) либо нет. То есть как я и сказал - бывает нужно но чаще реже

Jerry
08.03.2017
23:07:55

Sergey
08.03.2017
23:08:24
ну и опять же - задачи бывают разными
я тоже наследование таблиц юзаю но очень редко
и когда вижу в этом профит
p.s. если что - я из тех недолеких людей которые считают что "если ты лепишь наследование - попробуй подумать минут 10 хотя бы а надо ли"

Google

Sergey
08.03.2017
23:11:12
если тебе надо наследование типов - тогда скорее всего ок. А если ты дублирование устраняешь - скорее всего ты где-то свернул не туда

Jerry
08.03.2017
23:11:19
Чес слово, времени на демагогию нет)

Sergey
08.03.2017
23:15:35
делать одну сущность User или две (User и Admin) определяется исключительно циклом жизни оных
если у тебя юзеры и админы появляются одинаково - например регистрируются
то тогда логично делать их одним классом.
но обычно у простых юзеров и админов разный цикл жизни. Даже поведение может различаться
но... большинство тех кто юзает доктрину проектируют таблички в базе так что...

Admin
ERROR: S client not available

Sergey
08.03.2017
23:18:29
ну и могу привести массу примеров из своих проектов где делать одну сущность User является плохой идеей)
почему я так считаю - потому что мы так делали и в итоге напоролись на грабли)

Big_Shark
08.03.2017
23:22:44
Работал кто с ExceptionListener?

Sergey
08.03.2017
23:23:59

Big_Shark
08.03.2017
23:24:17
было дело
Там же можно сразу 2 лисенера повешать?
@fes0r насколько я понимаю все это вешается вот так
tags:
- { name: kernel.event_listener, event: kernel.exception }
?

Sergey
08.03.2017
23:24:51
ну тип stopPropogation

Big_Shark
08.03.2017
23:26:20
да
Смотри, у меня в первом есть такая штука
if ($exception instanceof EntityNotFoundException) {
throw new NotFoundHttpException($exception->getMessage(), $exception);
}
Но во второй лисенер ничего не приходит, с разу показывается страница с ошибкой

Sergey
08.03.2017
23:28:14
а не. на этом этапе уже не зафариться ивент

Google

Sergey
08.03.2017
23:28:32
ну мол ты уже прошел час X где стоял try/catch который ловил исключение и кидал ивент

Big_Shark
08.03.2017
23:28:36

Sergey
08.03.2017
23:28:55

Big_Shark
08.03.2017
23:29:07
/**
* Replaces the thrown exception.
*
* This exception will be thrown if no response is set in the event.
То что надо)

Sergey
08.03.2017
23:29:39
тип у ивента нашел метод?

Big_Shark
08.03.2017
23:29:54

Sergey
08.03.2017
23:29:58
)

Daniel
09.03.2017
05:56:14
https://github.com/mmoreram/ControllerExtraBundle
Хорошая весчь?

Sergey
09.03.2017
07:29:20
размазывать логику выборок из базы по аннотациям контроллера... так себе идея

Andrew
09.03.2017
07:34:37
кто-то php-pm в продакшне пробовал? Стоит менять php-fpm?

Sergey
09.03.2017
07:35:38

Sergey
09.03.2017
07:36:33

Andrew
09.03.2017
07:36:34

Sergey
09.03.2017
07:36:45
ну то есть "забыл finger cross хэндлер маналога почистить"

Salavat
09.03.2017
07:37:19

Sergey
09.03.2017
07:37:35

Salavat
09.03.2017
07:37:58
Блин. Я туплю. Прочитал php-pm как php-fpm

Sergey
09.03.2017
07:46:06