Использование Doctrine 2.x
Несколько, если сущности в моем домене сопоставлены с таблицами, имеющими только одну строку - это для поддержки дополнительной сложности в будущем (запланировано - так что это не соответствует YAGNI).
В качестве примера рассмотрим простую сущность
Category\Type:
type: entity
table: category_type
id:
id:
type: integer
generator:
strategy: AUTO
fields:
name:
type: string
В моем приложении на данный момент у меня есть только один тип категории (имя = 'обычная'), но каждый раз, когда я создаю новую категорию (сущность не показана - используйте ваше воображение; она имеет отношение N: 1 к категории \) Тип) Мне нужно связать тип с категорией. Это означает, что мне нужно извлечь мою единственную строку из базы данных, а затем установить связь.
$category = new Category();
$type = $em->getRepository('Category\Type')->findByName('regular');
$category->setType($type);
$em->persist($category);
$em->flush();
Я хочу знать, как мне избежать этого.
Если я просто использую новый тип, подобный этому ...
$category = new Category();
$type = new Category\Type();
$type->setName('regular');
$category->setType($type);
$category->setId(1); // <-- This gets incremented anyway after the persist is called
$em->persist($category);
$em->flush();
Затем доктрина пытается вставить тип в качестве новой сущности (на самом деле это не удается, поскольку столбец имени имеет уникальное ограничение в базе данных).
Я пытался сделать выше, а затем использовать слияние
http://www.doctrine -project.org / документы / ОРМ / 2,0 / ы / ссылки / рабочий-с objects.html # слияние-объектов
Но происходит то же самое.
Что мне здесь не хватает? Как я могу получить доктрину для обработки нового объекта как уже находящегося в базе данных, или как я могу кэшировать управляемый объект на уровне кода.
Неуместно ли эффективно «кэшировать» это в коде - должен ли я использовать один из других механизмов кэширования?