Я работаю над проектом с использованием Doctrine-MongoDB и Symfony.
Я встроил документ в другое использование \@EmbedMany
аннотаций.
Вот документы:
MusicalInfos:
<?php
// app/Resources/Document/Musical.php
namespace AppBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/**
* @MongoDB\Document(collection="bv_musical_infos")
*/
class MusicalInfos
{
/**
* @MongoDB\Id(strategy="auto")
*/
protected $id;
/**
* @MongoDB\ReferenceOne(targetDocument="User")
*/
protected $user;
/**
* @MongoDB\EmbedMany(targetDocument="InstrumentsPlayed")
*/
protected $instruments = array();
И вложенный документ:
<?php
namespace AppBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/**
* @MongoDB\EmbeddedDocument
*/
class InstrumentsPlayed
{
/**
* @MongoDB\ReferenceOne(targetDocument="Instruments")
*/
protected $instrument;
/**
* @MongoDB\Field(type="int")
*/
protected $practiceLevel;
После этого я создал форму для заполнения этих документов:
<?php
namespace AppBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class MusicalInfosType extends AbstractType
{
private $dm;
public function __construct($dm)
{
$this->dm = $dm;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('instruments', 'collection', array(
'type' => new InstrumentsPlayedType($this->dm),
'allow_add' => true,
'allow_delete' => true
));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Document\MusicalInfos',
));
}
public function getName()
{
return 'musical_infos';
}
}
контроллер
<?php
//...
if('POST' === $request->getMethod()) {
$form->bind($request);
if($form->isValid()) {
$user = $this->container->get('security.context')->getToken()->getUser();
$musicalInfos->setUser($user);
$dm->persist($musicalInfos);
$dm->flush();
$response = new JsonResponse();
$response->setData(array('registred_musical' => true));
return $response;
}
Но когда я пробую это, я всегда получаю это исключение:
Предупреждение: spl_object_hash () ожидает, что параметр 1 будет объектом, задан массив
Я не знаю почему …
Спасибо за вашу помощь !
Задача ещё не решена.
Других решений пока нет …