Цитата:
Сообщение от
wojzeh
на мой взгляд, это неверный подход. ибо если передать пустое значение в качестве userId, то оно будет заменено на ид текущего пользователя по умолчанию, и система попытается продублировать уже существующего пользователя, что, в свою очередь, приведёт к исключительной ситуации.
Пожалуй, код реализован некорректно, потому что пытается всегда создать запись для
текущего пользователя, даже если передать ему в качестве _userId код
другого пользователя, для которого запись еще не создана. Но одна некорректная реализация не означает, что используемый подход инициализации данных при первом обращении (т.н. ленивая инициализация) в целом не имеет права на жизнь.
Цитата:
Сообщение от
wojzeh
насколько я помню, каждая таблица должна иметь метод find, но нигде не говорилось, что он должен что-то создавать при этом. оправданным был бы подход в создании либо метода findAndCreateIfNotExist или хотя бы параметра наподобие forUpdate.
Посмотрите по перекрестным ссылкам, в скольки местах вызывается Company::createParameter(), - это более чем 90 параметрических таблиц. Если бы для этой инициализации использовался некий отдельнный метод findAndCreateIfNotExist() либо специальный параметр, то пришлось во
всем коде вместо find() для этих таблиц вызывать этот отдельнный метод либо, соответственно, всегда передавать этот параметр, поскольку неизвестно заранее, какой кусок кода первым обратится к той или иной параметрической таблице.