我有一个Packages实体(manyToMany和EntityTypeUser在数据库中为我创建了package_des_users实体)。因此,“我的包裹”实体包含一个TypeUser数组(因为可以将包裹分配给几种类型的用户)。
我希望能够删除属于我的一个包的TypeUser数组的一部分元素。
我的行动计划是:
现在,我能够恢复要处理的软件包以及要删除的TypeUser的名称以及包含我的软件包的TypeUser的数量。如果只包含一个,它将很好地抑制它。对于其他情况,问题仍然存在。
作为Symfony 3.4的初学者,我很难理解如何正确地做它。
我的controller.php函数:
/**
* Deletes a paquet entity.
*
* @Route("/{id}/{type}/delete", name="paquets_delete")
*/
public function deleteAction(Request $request, $id, $type)
{
$em = $this->getDoctrine()->getManager();
$unPaquet = $em->getRepository('PagesBundle:Paquet')->find($id);
$nbTypes = count($unPaquet->getTypeUser());
if($nbTypes == 1)
{
$em->remove($unPaquet);
}
else
{
$am = $this->getDoctrine()->getManager();
$leType = $am->getRepository('PagesBundle:TypeUser')
->findByTypeUtilisateur($type);
$em->$unPaquet->deleteTypeFromTypesUser($leType);
}
$em->flush();
return $this->redirectToRoute('paquets_index');
我的实体(拼音)功能:
/**
* @var \Doctrine\Common\Collections\Collection
* @ORM\ManyToMany(targetEntity="TypeUser")
* @ORM\JoinTable(name="Packages_des_TypesUser")
* @ORM\JoinColumn(nullable=false)
*/
private $typeUser;
public function __construct()
{
$this->typeUser = new ArrayCollection();
}
/**
* Get TypeUser
*
* @return Site\PagesBundle\Entity\TypeUser
*/
public function getTypeUser()
{
return $this->typeUser;
}
public function deleteTypeFromTypesUser(TypeUser $type)
{
$this->typeUser->removeElement($type);
}
因此,我希望能够从控制器中检索相应的TypeUser对象(结果是唯一的),以便可以将其作为参数传递给函数,该函数将负责将其从我的TypeUser数组中删除。包。然后将其转换为数据库。
感谢您的帮助!
答案 0 :(得分:0)
您必须在类上进行更改,正在调用实体管理器的$ unPaquet属性,然后调用一个不存在的函数。另外,您忘了检查是否有多个,否则您将从空数组中删除。
/**
* Deletes a paquet entity.
*
* @Route("/{id}/{type}/delete", name="paquets_delete")
*/
public function deleteAction(Request $request, $id, $type)
{
$em = $this->getDoctrine()->getManager();
$unPaquet = $em->getRepository('PagesBundle:Paquet')->find($id);
$nbTypes = count($unPaquet->getTypeUser());
if($nbTypes == 1)
{
$em->remove($unPaquet);
}
else if ( $nbTypes > 1 )
{
$leType = $em->getRepository('PagesBundle:TypeUser')
->findByTypeUtilisateur($type);
$unPaquet->deleteTypeFromTypesUser($leType);
}
$em->flush();
return $this->redirectToRoute('paquets_index');
}
“可捕获的致命错误:传递给Site \ PagesBundle \ Entity \ Paquet :: deleteTypeFromTypesUser()的参数1必须是Site \ PagesBundle \ Entity \ TypeUser的实例,给定数组”错误是由于查找返回数组。您必须更改该方法。如果您在那边需要帮助,请显示代码。
答案 1 :(得分:0)
我已经更新了代码:
/**
* Deletes a paquet entity.
*
* @Route("/{id}/{type}/delete", name="paquets_delete")
*/
public function deleteAction(Request $request, $id, $type)
{
$em = $this->getDoctrine()->getManager();
$unPaquet = $em->getRepository('PagesBundle:Paquet')->find($id);
$nbTypes = count($unPaquet->getTypeUser());
if($nbTypes == 1)
{
$em->remove($unPaquet);
}
else if($nbTypes > 1)
{
$am = $this->getDoctrine()->getManager();
$leType = $am->getRepository('PagesBundle:TypeUser')-
>findByTypeUtilisateur($type);
$unPaquet->deleteTypeFromTypesUser($leType[0]);
}
$em->flush();
现在可以了!谢谢