Я немного играю с Symfony2 и Doctrine2.
У меня есть сущность с уникальным названием, например:
class listItem
{
/**
* @orm:Id
* @orm:Column(type="integer")
* @orm:GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @orm:Column(type="string", length="255", unique="true")
* @assert:NotBlank()
*/
protected $title;
Теперь я выбираю JSON и обновляю свою базу данных следующими элементами:
$em = $this->get('doctrine.orm.entity_manager');
foreach($json->value->items as $item) {
$listItem = new ListItem();
$listItem->setTitle($item->title);
$em->persist($listItem);
}
$em->flush();
отлично работает с первого раза. но во второй раз я получаю ошибку sql (конечно): Integrity constraint violation: 1062 Duplicate entry
иногда мой файл json обновляется, и некоторые элементы новые, а некоторые нет.
Есть ли способ сказать менеджеру объектов пропустить дубликаты файлов и просто вставить новые?
Какой лучший способ сделать это?
Спасибо за помощь. Пожалуйста, оставьте комментарий, если что-то неясно
Edit:
то, что работает для меня, делает что-то вроде этого:
$uniqueness = $em->getRepository('ListItem')->checkUniqueness($item->title);
if(false == $uniqueness) {
continue;
}
$listItem = new ListItem();
$listItem->setTitle($item->title);
$em->persist($listItem);
$em->flush();
}
checkUniqueness
- это метод в моем репозитории ListItem, который проверяет, есть ли заголовок в моей базе данных.
это ужасно. это 2 запроса к базе данных для каждого элемента. это завершает около 85 запросов к базе данных для этого действия.