@idkiberlord077

EntityManager#remove() expects parameter 1 to be an entity object, array given. Как исправить?

Код :
public function deleteAction(Request $request, $id)
    {
        $form = $this->createDeleteForm($id);
        $form->handleRequest($request);

        if ($form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $entity = $em->getRepository('WindowsBundle:Category')->find($id);
            $query = $em->createQuery(
                'SELECT c.name FROM WindowsBundle:Category c
                WHERE c.id=:id')
                ->setParameter('id',$id);
            $entity_name = $query->getResult();
            $entity_product=$em->getRepository('WindowsBundle:Product')->findBy(array('category'=>$entity_name));

            if (!$entity ) {
                throw $this->createNotFoundException('Unable to find Category entity.');
            }
            $em->remove($entity);
            $em->flush();
            if($entity_product!==null)
            {
                $em->remove($entity_product);
                $em->flush();
            }
        }

Я пытаюсь удалить категорию(CategoryEntity) которая связана с (ProductEntity) Если удалить просто категорию, то объект (ProductEntity) который запрашивает данные из CategoryEntity выбивает ошибку.
Потому пытаюсь реализовать с помощью вот этой части и потом удалить :
$query = $em->createQuery(
                'SELECT c.name FROM WindowsBundle:Category c
                WHERE c.id=:id')
                ->setParameter('id',$id);
            $entity_name = $query->getResult();
            $entity_product=$em->getRepository('WindowsBundle:Product')->findBy(array('category'=>$entity_name));


и потом удалить здесь же.Но выбивает:
EntityManager#remove() expects parameter 1 to be an entity object, array given.
Буду очень благодарен за помощь.
  • Вопрос задан
  • 2574 просмотра
Решения вопроса 1
27cm
@27cm
TODO: Написать статус
1. Почему не настроен маппинг свойства name для категории?
$entity = $em->getRepository('WindowsBundle:Category')->find($id);

// Чтобы вместо этого
$query = $em->createQuery('SELECT c.name FROM WindowsBundle:Category c WHERE c.id=:id')
    ->setParameter('id',$id);
$entity_name = $query->getResult();

// ...писать просто
$entity_name = $entity->getName();


2. Вы получаете массив Product. Так и удаляйте все по одному:
$entity_product=$em->getRepository('WindowsBundle:Product')->findBy(array('category'=>$entity_name));
foreach ($entity_product as $product) {
    $em->remove($product);
}
$em->flush();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы