symfonyフォームを通じて新しいエンティティを追加する際に問題があります。新しいエンティティが関係を介して見つかりました - フォームからのみ
私のDBは次のようになります。
$builder
->add('document', 'entity', array(
'label' => 'Dokument',
'class' => 'AppBundle\Entity\Document',
'query_builder' => function (EntityRepository $er) use ($accountId) {
return $er->createQueryBuilder('d')
->join('d.account', 'a')
->where('a.id = :account_id')
->setParameter('account_id', $accountId);
},
'attr' => array(
'class' => 'form-control',
)));
私は私が手の形を通じて文書を選択しています: ドキュメントは、すべての項目がグループ
私のフォームを持っている多くのアイテムが含まれていますエラー
新しいエンティティが関係を通じて見つかりました。
しかし、私はそれを手動でやっているとき、それは良い作品(DBからDocument
を取得し、Item
に設定し、新しいItem
インスタンスを作成します)。
フォームのDocument
インスタンスがItem
インスタンスとの接続を持たず、新しいエンティティとして認識されたようです。
私のORMファイル:
ドキュメント:
AppBundle\Entity\Document:
type: entity
table: document
id:
id:
type: integer
nullable: false
unsigned: true
id: true
generator:
strategy: IDENTITY
fields:
documentId:
type: string
nullable: true
length: 50
fixed: false
column: document_id
invoiceId:
type: integer
nullable: true
unsigned: true
column: invoice_id
invoiceDate:
type: datetime
nullable: true
column: invoice_date
modified:
type: boolean
nullable: false
default: '0'
oneToMany:
items:
targetEntity: Item
mappedBy: document
children:
targetEntity: Document
mappedBy: parent
manyToOne:
parent:
targetEntity: Document
cascade: { }
mappedBy: null
inversedBy: null
joinColumns:
parent_id:
referencedColumnName: id
orphanRemoval: false
account:
targetEntity: Account
cascade: ['persist']
mappedBy: null
inversedBy: document
joinColumns:
account_id:
referencedColumnName: id
orphanRemoval: false
lifecycleCallbacks: { }
アイテム:
AppBundle\Entity\Item:
type: entity
table: item
id:
id:
type: integer
nullable: false
unsigned: true
id: true
generator:
strategy: IDENTITY
fields:
quantity:
type: integer
nullable: true
unsigned: true
manyToOne:
group:
targetEntity: Group
cascade: ['persist']
mappedBy: null
inversedBy: items
joinColumns:
group_id:
referencedColumnName: id
orphanRemoval: false
document:
targetEntity: Document
cascade: ['persist']
mappedBy: null
inversedBy: item
joinColumns:
document_id:
referencedColumnName: id
orphanRemoval: false
lifecycleCallbacks: { }
詳細
ワーキングコード:
/**
* @return boolean
*/
public function saveItem(Item $item)
{
try {
$document = $this->em->getRepository('AppBundle:Document')->find($item->getDocument()->getId());
$objDate = new \DateTime();
$item
->setDocument($document)
->setDateFrom(new \DateTime($item->getDateFrom()))
->setDateTo(new \DateTime($item->getDateTo()))
->setCreateDate($objDate)
->setFreePaperVersion(true)
->setAccess(0);
$this->em->persist($item);
$this->em->flush();
return true;
} catch
(Exception $ex) {
return false;
}
}
に動作していないコード:
/**
* @return boolean
*/
public function saveItem(Item $item)
{
try {
$objDate = new \DateTime();
$item
->setDateFrom(new \DateTime($item->getDateFrom()))
->setDateTo(new \DateTime($item->getDateTo()))
->setCreateDate($objDate)
->setFreePaperVersion(true)
->setAccess(0);
$this->em->persist($item);
$this->em->flush();
return true;
} catch
(Exception $ex) {
return false;
}
}
新しいエンティティを維持する 'document'関係の' cascade:['persist'] 'があります。新しいインスタンスがあるのに 'cascade'オプションが設定されていないときに表示されるエラーです。問題の原因が他の場所にあるように見えますが、見つけ出すための情報が少なすぎます。 –
カスケード:['persist'] 'がないと、エラーが表示されます。コードが間違っています。しかし、教義はそれを新しいエンティティとして認識します。なぜなら、私が「持続」を追加すると、それは関係の階層(新しいものとして他のエンティティを認識する)に上がるからです。それが最後のものに達するまで、それは私に "Undefined index"エラーを与えます。 – prgj83
フォーム上で動作するコントローラコードと、それが動作することを述べた「手動」操作を提供できますか? –