Доктрина наследования, базовый класс и два подтипа - PullRequest
0 голосов
/ 31 октября 2018

Мне нужно обработать 3 объекта, которые охватывают одну и ту же таблицу «пользователи»:

  • User: охватывает класс пользователей и участвует в некоторых службах аутентификации / проверки.

  • Driver: расширяет User и относится к некоторым другим таблицам. Также участвует в различных услугах.

  • Passenger: расширяет User и относится к другим таблицам. Также участвует в различных услугах.

Все записи в таблице users являются пользователями. Эти записи с is_driver=0 являются пассажирами, а записи с is_driver=1 - водителями.

Я знаю, что могу сделать сопоставленный суперкласс для таблицы пользователей, и дискриминатором будет is_driver. Таким образом, сущность Passenger и сущность Driver расширили бы это. Проблема, которую я вижу, заключается в том, что я не могу создать сущность User, которая расширяет этот сопоставленный суперкласс, потому что у него нет дискриминатора, любая запись является User.

Существует существующая база данных, и я переношу проект, есть столбец is_driver, в котором указывается, является ли пользователь водителем или пассажиром (крошечные целые 0 или 1). Теперь я хотел бы иметь 3 объекта.

  • User: универсальный (любой ряд)
  • Driver: эти строки с is_driver = 1
  • Passenger: эти строки с is_driver = 0

В идеале все они должны быть каким-то образом прикреплены в ORM к таблице users, и водитель и пассажир также должны быть связаны с разными объектами по отдельности.

...