Size: a a a

2020 September 17

СП

Сергей Предводителев... in Yii Framework 3
У тебя нет в паблике примера?
источник

RT

Roman Tsurkanu in Yii Framework 3
модель user просто массив данных
источник

RT

Roman Tsurkanu in Yii Framework 3
Сергей Предводителев
У тебя нет в паблике примера?
неа
источник

СП

Сергей Предводителев... in Yii Framework 3
В целом подход понял.. есть над чем подумать. Спасибо :)
источник

RT

Roman Tsurkanu in Yii Framework 3
а у класса Teacher уже будут нужные методы только его
источник

I

Igor in Yii Framework 3
В cycle так и реализовано - таблица одна, классов много
источник

СП

Сергей Предводителев... in Yii Framework 3
Igor
В cycle так и реализовано - таблица одна, классов много
@romkatsu предлагает не вешать эту логику на ORM
источник

NO

Nex Otaku in Yii Framework 3
Сергей Предводителев
В некоторых случаях очень удобно.
Например, есть в системе контрагенты, которые могут быть организацией, ИП или физлицом, для каждого из них есть уникальные поля. Но в системе все работают с контрагентами. Делаем базовую сущность Contractor, от неё наследуемся и для каждого типа контрагента делаем свой класс.
Я работал с такими решениями и даже сам проектировал.

Поначалу это работает, но чем дальше, тем больше вылезает проблем. Всë из-за привязки кода к жëсткой структуре в БД.

Со временем и нарастанием отличий в логике, код покрывается костылями...

Идеально, для ИП завести таблицу ИП. Для физлиц, таблицу физлиц. Для организаций, таблицу организаций. Для "общей" сущности контракторов, заводим отдельную таблицу контракторов. Делаем связи:
ип - контрактор
физлицо - контрактор
организация - контрактор
источник

СП

Сергей Предводителев... in Yii Framework 3
Nex Otaku
Я работал с такими решениями и даже сам проектировал.

Поначалу это работает, но чем дальше, тем больше вылезает проблем. Всë из-за привязки кода к жëсткой структуре в БД.

Со временем и нарастанием отличий в логике, код покрывается костылями...

Идеально, для ИП завести таблицу ИП. Для физлиц, таблицу физлиц. Для организаций, таблицу организаций. Для "общей" сущности контракторов, заводим отдельную таблицу контракторов. Делаем связи:
ип - контрактор
физлицо - контрактор
организация - контрактор
Допустим у контрагента есть метод, который должен отдавать разный результат в зависимости от типа и данных специфичных для типа. Какой-нибудь "гетРеквизиты"... Как при таком подходе это реализовать?
источник

NO

Nex Otaku in Yii Framework 3
Реквизиты используются в контрагенте, значит будут храниться в таблице контрагента.
источник

СП

Сергей Предводителев... in Yii Framework 3
Nex Otaku
Реквизиты используются в контрагенте, значит будут храниться в таблице контрагента.
Это сводка по данным в зависимости от типа. ЗАчем их хранить и там и там?
источник

NO

Nex Otaku in Yii Framework 3
Нет. Ты хранишь их в контрагенте.
источник

СП

Сергей Предводителев... in Yii Framework 3
getInfo какой-нибудь. Который должен для физика вывести ФИО и паспортные данные, а для ООО вывести всякие ОКПО, ОГРН и т. д.
источник

СП

Сергей Предводителев... in Yii Framework 3
То есть хранить всё-всё в контрагенте... и делать кучу ифов?
источник

NO

Nex Otaku in Yii Framework 3
Нет, в контрагенте только то, что является однозначно общим. Например инн.
источник

СП

Сергей Предводителев... in Yii Framework 3
Nex Otaku
Нет, в контрагенте только то, что является однозначно общим. Например инн.
окей. как быть с тем что не общзее. Как в этом примере:

getInfo какой-нибудь. Который должен для физика вывести ФИО и паспортные данные, а для ООО вывести всякие ОКПО, ОГРН и т. д.
источник

JD

John Doe in Yii Framework 3
можно сделать 2 класса реализующих 1 интерфейс с функцией getInfo
данные хранить в виде EAV
в самих классах по getInfo выдавать нужный набор полей
источник

СП

Сергей Предводителев... in Yii Framework 3
John Doe
можно сделать 2 класса реализующих 1 интерфейс с функцией getInfo
данные хранить в виде EAV
в самих классах по getInfo выдавать нужный набор полей
Есть общие данные и есть частные для типов
источник

СП

Сергей Предводителев... in Yii Framework 3
Интерфейс подразумевает, что всё разное будет
источник

NO

Nex Otaku in Yii Framework 3
interface Contragent { public function getInfo():string }
class Fizik implements Contragent { public function getInfo():string { return $this->fio; } }
class OOO implements Contragent { public function getInfo():string { return $this->okpo . ' ' . $this->ogrn; } }
источник