Symfony2 UniqueEntity не запускается и выдает исключение БД

У меня проблема с проверкой UniqueEntity в проекте Symfony 2.8.8, которая не запускается, вызывая исключение db:
SQLSTATE [23000]: нарушение ограничения целостности: 1062 Повторяющаяся запись ‘7Nrl / JfB8E47D1ZtoryFsQ ==’ для ключа ‘UNIQ_3BF9FEA896901F54’

Другие правила проверки работают.

Здесь вы находитесь в validation.yml. Поле с не сработавшим ограничением — это «число».

AppBundle\Entity\UrinaryCytologicalExam:
constraints:
- Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
fields: [number]
message: Il numero di referto è già presente nel db
properties:
age:
- Type:
type: integer
acceptanceDate:
- NotBlank:
message: Campo obbligatorio
- Date:
message: La data inserita non è valida
adequacySample:
- NotBlank:
message: Campo obbligatorio
- Type:
type: string
- Length:
min: 3
max: 255
minMessage: "Il campo deve contenere almeno {{ limit }} caratteri."maxMessage: "Il campo non può superare {{ limit }} caratteri."anatomicalSamplingSite:
- Type:
type: string
- Length:
min: 3
max: 255
minMessage: "Il campo deve contenere almeno {{ limit }} caratteri."maxMessage: "Il campo non può superare {{ limit }} caratteri."category:
- NotBlank:
message: Campo obbligatorio
- Valid: ~
clinicalInformation:
- NotBlank:
message: Campo obbligatorio
- Type:
type: string
description:
- NotBlank:
message: Campo obbligatorio
- Type:
type: string
number:
- NotBlank:
message: Campo obbligatorio
- Regex:
pattern: "/^(C|c)\s[0-9]{4}\s[0-9]{4}$/"message: "Il numero di referto è composto dalla lettera C, uno spazio, 4 numeri, uno spazio, 4 numeri (es. C 2016 0008)"reportDate:
- Date:
message: La data inserita non è valida
sampleDate:
- Date:
message: La data inserita non è valida
submittedMaterial:
- NotBlank:
message: Campo obbligatorio
- Type:
type: string
gynecologist:
- Valid: ~

и другие важные файлы …

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;

/**
* AppBundle\Entity\UrinaryCytologicalExam
*
* @ORM\Table(name="urinary_cytological_exams")
* @ORM\Entity(repositoryClass="UrinaryCytologicalExamRepository")
* @ORM\HasLifecycleCallbacks
*/
class UrinaryCytologicalExam
{
CONST EXAM_NAME = 'Esame citologico urinario';

/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var int $age
*
* @ORM\Column(type="integer", nullable=true)
*/
private $age;

/**
* @var datetime $acceptanceDate
*
* @ORM\Column(name="acceptance_date", type="date", nullable = true)
*/
private $acceptanceDate;

/**
* @var string $adequacySample
*
* @ORM\Column(type="encrypted_string", length=255)
*/
private $adequacySample;

/**
* @var string $anatomicalSamplingSite
*
* @ORM\Column(type="encrypted_string", length=255)
*/
private $anatomicalSamplingSite;

/**
* @var string $clinicalInformation
*
* @ORM\Column(name="clinical_information", type="encrypted_text")
*/
private $clinicalInformation;

/**
* @var string $description
*
* @ORM\Column(type="encrypted_text")
*/
private $description;

/**
* @var boolean $isActive
*
* @ORM\Column(type="boolean", nullable=true)
*/
private $isActive = false;

/**
* @var boolean $isSampleDateNotAvailable
*
* @ORM\Column(type="boolean", nullable=true)
*/
private $isSampleDateNotAvailable;

/**
* @var string $number
*
* @ORM\Column(type="encrypted_string", length=255, unique = true)
*/
private $number;

/**
* @var datetime $sampleDate
*
* @ORM\Column(name="sample_date", type="date", nullable = true)
*/
private $sampleDate;

/**
* @var datetime $reportDate
*
* @ORM\Column(name="report_date", type="date", nullable = true)
*
*/
private $reportDate;

/**
* @var string $submittedMaterial
*
* @ORM\Column(name="submitted_material", type="encrypted_text")
*/
private $submittedMaterial;/**
* @var datetime $createdAt
*
* @ORM\Column(name="created_at", type="datetime", nullable=true)
* @Gedmo\Timestampable(on="create")
*
*/
private $createdAt;

/**
* @var datetime $updatedAt
*
* @ORM\Column(name="updated_at", type="datetime", nullable=true)
* @Gedmo\Timestampable(on="update")
*/
private $updatedAt;

/**
* @var Category $category
*
* @ORM\ManyToOne(targetEntity="\AppBundle\Entity\Core\UrinaryCytologicalExamParisSystem")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
private $category;

/**
* @var Gynecologist $gynecologist
*
* @ORM\ManyToOne(targetEntity="Gynecologist")
* @ORM\JoinColumn(name="gynecologist_id", referencedColumnName="id")
*/
private $gynecologist;

/**
* @var PersonDetail $personDetail
*
* @ORM\ManyToOne(targetEntity="\AppBundle\Entity\PersonDetail", inversedBy="HPVExams")
* @ORM\JoinColumn(name="person_detail_id", referencedColumnName="id")
*/
private $personDetail;

/**
* @var User $user
*
* @ORM\ManyToOne(targetEntity="User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=true)
*/
private $user;

//...
}

use Symfony\Component\HttpFoundation\Request,
Symfony\Component\Form\FormInterface,
Symfony\Component\HttpFoundation\Session\Session;

use Doctrine\ORM\EntityManager;
use AppBundle\Entity\UrinaryCytologicalExam;
use AppBundle\Utility\Uppercaser;

class UrinaryCytologicalExamFormHandler {

private $entityManager;
private $isClickedSubmitAndAddButton;
private $session;
private $uppercaser;

public function __construct(
EntityManager $entityManager,
Session $session,
Uppercaser $uppercaser
)
{
$this->entityManager = $entityManager;
$this->session = $session;
$this->uppercaser = $uppercaser;
}

public function handle(FormInterface $form, Request $request, $message)
{
if(!$request->isMethod('POST')) {
return false;
}

$form->bind($request);

$this->isClickedSubmitAndAddButton = ($form->get('submitAndAdd')->isClicked()) ? true : false;

if(!$form->isValid()) {
return false;
}

$exam = $form->getData();

$this->persist($exam, $message);

return true;
}

public function getIsClickedSubmitAndAddButton() {
return $this->isClickedSubmitAndAddButton;
}

public function persist(UrinaryCytologicalExam $exam, $message)
{
$this->entityManager->persist($this->uppercaser->uppercase($exam));
$this->entityManager->flush();

$this->session->getFlashBag()->add('success', $message);
}
}

Тот же код работает с другими объектами …

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]