私は自分の質問を完全に言い換えることにしました。うまくいけば、私の問題はこの方法ではるかに明確になります。
エンティティ内に外部キーフィールドを表すフォームをどのように埋め込みますか?たとえば、プロパティには、ステータス(所有、利用可能、販売など)のテーブルへの外部キーがあります。埋め込みフォームを使用すると、埋め込みフォーム(この場合はステータス)にどの親エンティティが埋め込まれているかを理解させる方法がわかりません。フォームが送信されたときに、プロパティのステータスを作成/変更すると、外部キーの関係のみが変更されます。$ property-> setStatus($ status)を正常に呼び出すことで、プロパティをクエリしてそのステータスを変更できるので、Doctrineの関係は正しいと思います。
現在、フォーム送信時にステータスを変更しようとすると、次のエラーが発生します。
Catchable Fatal Error: Object of class Test\Bundle\SystemBundle\Entity\Status could not be converted to string in /home/vagrant/projects/test.dev/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php line 1118
私のフォームの作成:
$form = $this->createForm(new PropertyType(), $property);
プロパティエンティティのステータスに対するプロパティのエンティティ関係:
/**
* @var Status $status
*
* @ORM\ManyToOne(targetEntity="Test\Bundle\SystemBundle\Entity\Status")
* @ORM\JoinColumn(name="StatusId", referencedColumnName="Id", nullable=false)
*/
protected $status;
これは、StatusTypeクラスを埋め込む私のPropertyTypeクラスの行です。
->add('status', new StatusType())
そして、これが私のStatusTypeフォームクラスです。
class StatusType extends AbstractType
{
public $statusType = null;
public function __construct($statusType)
{
$this->statusType = $statusType;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name', 'entity', array('label' => 'Status Name',
'class' => 'Test\Bundle\SystemBundle\Entity\Status',
'property' => 'name'));
}
public function getParent()
{
return 'form';
}
public function getDefaultOptions(array $options)
{
return array('data_class' => 'Test\Bundle\SystemBundle\Entity\Status');
}
public function getName()
{
return 'status';
}
}