0

私の目標は、フィールドに対してuniqueEntityの制約を持つエンティティを検証することです。このフィールドは、ライフサイクルコールバックPrePersistを使用して連結された2つのマッピングされていないフィールドで構成されます。問題は、検証が行われず、システムがデータをデータベースに挿入することを許可しないということです。symfony - マッピングされていないフィールドのユニークなエンティティの制約

/** 
* Recipe 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="AppBundle\Entity\RecipeRepository") 
* @ORM\HasLifecycleCallbacks() 
* @UniqueEntity(
*  ignoreNull = false, 
*  fields={"amount"}, 
*  message="Not valid" 
*) 
*/ 
class Recipe 
{...} 

...

/** 
* @ORM\PrePersist() 
*/ 
public function preSave() 
{ 
    $this->amount = $this->getAmountInteger() . '.' . $this->getAmountDecimal(); 
} 
+0

属性の上にある '@ORM \ Column(name =" amount "、type =" string "、length = 255、unique = true)'はどうでしょうか?_(UniqueEntity制約を維持します)_? – Delphine

+0

スキーマツール専用の 'unique = true'はありませんか? –

+0

@Delphine、フィールドにunique = true制約が設定されているため、フォームを正しく検証できず、行の一意性を処理できません。実際には、チェックは、フォームの有効なメソッドではなくフラッシュで行われます。 –

答えて

0

私はこの定義に実体があり、細かい実行されますが、あなたのケースは異なっているため、preSaveであなたのセット '量' ...

* @UniqueEntity(fields={"amount"}, message="Not valid") 
* @ORM\Table(uniqueConstraints={@ORM\UniqueConstraint(name="unique_amount", columns={"amount"})}) 

そして、他のエンティティに私が使用

@ORM\Column(type="string", length=127, nullable=false, unique=TRUE) 

のTh私はcompuestキーを使用し、フィールドにキーを定義する= {field1、field2} .. 2番目の例では、私は単純なユニークキーを使用します。

関連する問題