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')
))
;
}
如果你坚持'$ sitEtab'而不是'$ site'会发生什么?也是'$ this-> getUser()'一个对象的结果? – Salem
如果我试图在循环中坚持$ sitEtab,我有同样的错误。 我已经有这种关系和形式在我的项目,但没有这个错误,虽然代码是类似的... – Deynis
我的猜测是,在一个关系的某个地方,你给一个对象ID而不是对象本身,但从代码你发布我不能发现没有 – Salem