У меня есть таблица, позволяющая сказать, что это таблица правил, если к продукту не должна применяться скидка, схема базы данных mysql выглядит примерно так:
Код: Выделить всё
CREATE TABLE discount_rule (
business_id int not null,
category_id int not null default 0, -- zero in the id is used to represent it applies across all categories
brand_id int not null default 0,
..., -- bunch of other properties
PRIMARY KEY (business_id, category_id, brand_id)
);
Код: Выделить всё
class DiscountRule
{
#[Column(type: 'integer')]
#[Id]
private int $businessId;
#[Column(type: 'integer')]
#[Id]
private int $categoryId;
#[Column(type: 'integer')]
#[Id]
private int $brandId;
...
}
Код: Выделить всё
class DiscountRule
{
#[ManyToOne(...)]
#[Id]
private Business $businessId;
#[ManyToOne(...)]
#[Id]
private ?Category $categoryId;
#[ManyToOne(...)]
#[Id]
private ?Brand $brandId;
...
}
Использование прокси-ссылки кажется неправильным, поскольку ->getReference(Category::class, 0) не является сущностью и обрабатывается так, как если бы это могло означать, что эта недопустимая ссылка взорвется в неожиданных местах кода.
Что я действительно ищу здесь, так это что-то вроде настроить отображение доктрины так, чтобы то, что является нулем в классе сущностей, обезвоживалось до 0 в базе данных и наоборот. Таким образом, схему не нужно менять, но я могу использовать сущность со связью. Если вышеописанное невозможно, я был бы открыт для изменений схемы, пока ограничение уникальности не потеряно.
Текущий код, похоже, работает, хотя загрузка такого объекта будет иметь отношение к объекту Proxy с id=0, который кажется, что он взорвется с исключением где-то неожиданно, поэтому кажется, что null будет гораздо более безопасным отображением.
Подробнее здесь: https://stackoverflow.com/questions/798 ... olumn-that
Мобильная версия