2014-07-23 74 views
0

一个多对一当我试图坚持我的实体出现此错误:Symfony2的坚持与属性

警告:spl_object_hash()预计参数1是对象,在 C中给出整数 :\ WAMP \ WWW \谟\供应商\原则\ ORM \ LIB \原则\ ORM \ UnitOfWork.php 线1601

这是我的实体网站:

/** 
* Etablissement 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="Intranet\RhBundle\Entity\SiteRepository") 
*/ 
class Site { 
/** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
private $id; /** 
    * @ORM\OneToMany(targetEntity="Intranet\RhBundle\Entity\SiteEtablissement", 
mappedBy="site", cascade={"persist", "remove"}, orphanRemoval=true) 
    * */ 
private $siteEtablissements; 
} 

这是我的源泉馆的实体:

/** 
* Etablissement 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="Intranet\RhBundle\Entity\EtablissementRepository") 
*/ 
class Etablissement { 

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

而对于关系的实体:

/** 
* @ORM\Entity(repositoryClass="Intranet\RhBundle\Entity\SiteEtablissementRepository") 
*/ 
class SiteEtablissement { 

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

/** 
* @ORM\ManyToOne(targetEntity="Intranet\RhBundle\Entity\Site", inversedBy="siteEtablissements") 
* @ORM\JoinColumn(name="site_id", referencedColumnName="id") 
*/ 
private $site; 

/** 
* @ORM\ManyToOne(targetEntity="Intranet\RhBundle\Entity\Etablissement") 
* @ORM\JoinColumn(name="etablissement_id", referencedColumnName="id", onDelete="CASCADE") 
*/ 
private $etablissement; 
} 

所以我不明白为什么我有这样的错误,我的地图似乎是确定。我没有任何实体错误,并且在我的控制器中坚持$ site之前没有错误。

这是我的控制器:

public function gererEtablissementAction(Request $request, Site $site) { 
    $form = $this->createForm(new GererSiteEtabType(), $site); 
    if ($request->getMethod() == 'POST') { 
     $form->handleRequest($request); 
     if ($form->isValid()) { 
      $em = $this->getDoctrine()->getManager(); 
      foreach ($site->getSiteEtablissements() as $sitEtab) 
       if (is_null($sitEtab->getAutor())) 
        $sitEtab->setAutor($this->getUser()); 
      $em->persist($site); 
      $em->flush(); 
      $this->get('session')->getFlashBag()->add('success', "Les établissement du site " . $site->getNom() . " ont été modifiés avec succès !"); 
      return $this->redirect($this->generateUrl('intranet_rh_homepage_employes')); 
     } else 
      $this->get('session')->getFlashBag()->add('danger', "Erreur de formulaire !"); 
    } 
    return $this->render('IntranetRhBundle:Site:gererEtablissement.html.twig', array('site' => $site, 'form' => $form->createView())); 
} 

当我打印$定点> getSiteEtablissements,有网站和源泉馆对每个对象的每一面......

这是构建形式:

public function buildForm(FormBuilderInterface $builder, array $options) { 
    $builder 
      ->add('siteEtablissements', 'collection', array(
       'type' => new SiteEtablissementType(), 
       'allow_add' => true, 
       'allow_delete' => true, 
       'by_reference' => false, 
       'required' => false 
      )) 
    ; 
} 

而子窗体:

public function buildForm(FormBuilderInterface $builder, array $options) { 
    $builder 
      ->add('etablissement', 'entity', array(
       'label' => 'Etablissement :', 
       'class' => 'IntranetRhBundle:Etablissement', 
       'property' => 'nom', 
       'query_builder' => function(EtablissementRepository $er) { 
      // récupère les établissements triés par ordre alpabétique croissant de nom 
      return $er->createQueryBuilder('e') 
        ->orderBy('e.nom', 'ASC'); 
     }, 
       'attr' => array('class' => 'form-control') 
      )) 
    ; 
} 
+0

如果你坚持'$ sitEtab'而不是'$ site'会发生什么?也是'$ this-> getUser()'一个对象的结果? – Salem

+0

如果我试图在循环中坚持$ sitEtab,我有同样的错误。 我已经有这种关系和形式在我的项目,但没有这个错误,虽然代码是类似的... – Deynis

+0

我的猜测是,在一个关系的某个地方,你给一个对象ID而不是对象本身,但从代码你发布我不能发现没有 – Salem

回答

0

我发现错误:Autor的一个错误的初始化。 Autor初始化为“0”,如果是is_null,则在循环中测试。所以0不为空,当它持续时,有一个错误,因为没有用户ID为0 ...