Size: a a a

2020 September 18

ВМ

Виктор Монастырев... in symfony
Народ, подскажите, если кто знает, как указать релешины

Суть:
Есть заказ с несколькими типами адресов
Структура всех адресов одинаковая, только тип отличается. Тип это integer, их там 4шт на данный момент

В таблице с адресами нет автоинкрементного id, там связка id заказа + тип - это и есть PK, два раза один и тот же тип адреса на заказ не может быть

В самом order хотел завести 4 свойства и указать связи OneToOne, но чет не могу сообразить, а так вообще можно указывать?
Хочу что бы когда мне нужен текущий адрес я делал так
$order->getCurrentAddress(), а не перебирать коллецию
источник

R

Rav in symfony
Может, сингл тейбл инхеританс юзать для адресов?
источник

ВМ

Виктор Монастырев... in symfony
Rav
Может, сингл тейбл инхеританс юзать для адресов?
и так есть
источник

ВМ

Виктор Монастырев... in symfony
но это когда я сами адреса разделяю
А вот как адреса получить\привязать к заказу?
Мне то тип указывать не надо, я его, по сути, знаю заранее
источник

R

Rav in symfony
Тогда, видимо, не понял суть проблемы.

Ну и вообще, как может быть getCurrent  если их может быть несколько?
источник

ВМ

Виктор Монастырев... in symfony
Rav
Тогда, видимо, не понял суть проблемы.

Ну и вообще, как может быть getCurrent  если их может быть несколько?
Их не может быть несколько
источник

ВМ

Виктор Монастырев... in symfony
Сейчас попробую по другому оисать
источник

ВМ

Виктор Монастырев... in symfony
Допустим заказ с id 123
У него, в его таблице, 123 конечно же PK

Таблица адресов
Там PK составной:
order_id - id заказа и foreign key указывает на таблицу с заказами
type: int - их 4 шт, их сто лет как 4 штуки и расширятся они не будут

у order есть 4 метода
order->gerCurrent
order->getRegister
order->getEmpl
order->getAdditional

Вот как прописать OneToOne ?
источник

SP

Sergey Protko in symfony
Виктор Монастырев
Допустим заказ с id 123
У него, в его таблице, 123 конечно же PK

Таблица адресов
Там PK составной:
order_id - id заказа и foreign key указывает на таблицу с заказами
type: int - их 4 шт, их сто лет как 4 штуки и расширятся они не будут

у order есть 4 метода
order->gerCurrent
order->getRegister
order->getEmpl
order->getAdditional

Вот как прописать OneToOne ?
Отдельно от этой шляпы?
источник

IS

Ihor Shchypakov in symfony
делает также как ManyToOne, все отличие это unique=true/false
источник

ВМ

Виктор Монастырев... in symfony
Сейчас все эти адреса сделаны через Embeddable и находятся в той же таблице, что и заказ
Надо вынести адреса в отдельную таблицу, т.к. часть из них часто пустая
источник

ВМ

Виктор Монастырев... in symfony
Sergey Protko
Отдельно от этой шляпы?
что отдельно?
источник

R

Rav in symfony
Т.е. у ордера таки 4 адреса?
источник

ВМ

Виктор Монастырев... in symfony
Rav
Т.е. у ордера таки 4 адреса?
да, но они фиксированные
источник

ВМ

Виктор Монастырев... in symfony
то есть два раза одного типа быть не может
источник

ВМ

Виктор Монастырев... in symfony
потом и ключ составной
источник

R

Rav in symfony
Ну так one-to-many с проверкой инвариантов и в геттерах выборка нужного по типу.
источник

R

Rav in symfony
Из коллекции
источник

ВМ

Виктор Монастырев... in symfony
Rav
Из коллекции
тоже думал
источник

ВМ

Виктор Монастырев... in symfony
Но не хотелось просто перебором заниматься при доставании адресов ))
источник