2016-01-01 4 views
0

У меня есть 2 объекта. Категория сущности с двумя столбцами: id, caName. Служба сущностей с 4 столбцами: id, seName, sePrice, caId. Столбец caId в Сервисе содержит id категории.symfony2 createAction с OneToMany

Моя цель делает createAction, editAction и deleteAction для Сервиса. У меня нет проблем с editAction и deleteAction. Однако мой createAction возвращает 500 (Internal Server Error).

Log:

Catchable Ошибка: Аргумент 1 передается AppBundle \ Entity \ Службы :: setCaId() должен быть экземпляром AppBundle \ Entity \ Категория, число дано, называемый в/Applications/MAMP/HTDOCS /symfony_luxurysalon/src/AppBundle/Controller/ServiceController.php на линии 67 и определил

Категория объект:

class Category 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    * @ORM\OneToMany(
    * targetEntity="Service", 
    * mappedBy="caId" 
    *) 
    */ 
    private $id; 

    ... 

    public function __construct() 
    { 
    $this->id = new ArrayCollection(); 
    } 

    /** 
    * Get id 
    * 
    * @return Service 
    */ 
    public function getId() 
    { 
    return $this->id; 
    } 

    ... 
} 

служба объект:

class Service 
{ 
    ... 

    /** 
    * @var int 
    * 
    * @ORM\Column(name="ca_id", type="integer", length=2) 
    * @ORM\ManyToOne(targetEntity="Category", inversedBy="id", cascade={"persist","remove"}) 
    * @ORM\JoinColumn(onDelete="CASCADE") 
    */ 
    private $caId; 

    ... 

    /** 
    * Set caId 
    * 
    * @param \AppBundle\Entity\Category $caId 
    * 
    * @return Service 
    */ 
    public function setCaId(\AppBundle\Entity\Category $caId = null) 
    { 
     $this->caId = $caId; 
     return $this; 
    } 

    /** 
    * Get caId 
    * 
    * @return \AppBundle\Entity\Category 
    */ 
    public function getCaId() 
    { 
    return $this->caId; 
    } 
} 

Контроллер:

$entity = new Service(); 
$entity 
    ->setSeName("test") 
    ->setSePrice("200"); 
    ->setCaId("2"); 

$em = $this->getDoctrine()->getManager(); 
$em->persist($entity); 
$em->flush(); 
+0

Пожалуйста, разместите журнал для этого запроса. Без него можно было только догадываться, какова реальная проблема (особенно учитывая, что ваш код даже не является полным). – xabbuh

ответ

1

Вы должны пройти Category экземпляр вместо идентификатора для метода setCaId() (кстати. имя вводит в заблуждение, если вы не ожидаете, что идентификатор будет передан, что-то вроде setCategory() было бы более уместным). Таким образом, вы должны сначала посмотреть категорию с идентификатором 2 из хранилища, а затем передать эту категорию методы:

$doctrine = $this->getDoctrine(); 

$category = $doctrine->getRepository('AppBundle:Category')->find(2); 

$service = new Service(); 
$service->setCaId($category); 

$em = $doctrine->getManager(); 
$em->persist($service); 
$em->flush(); 

Вы можете добавить некоторую логику, рассматривающее дело, что find() не возвращает результат (например, если ни одна категория с id 2 не существует).

+0

Catchable Fatal Error: Объект класса AppBundle \ Entity \ Category не может быть преобразован в строку –

+0

Я пробовал $ service-> setCaId ($ category-> getId()). Он возвращает мне ту же ошибку, что и выше. –

+0

«Catchable Fatal Error: объект класса AppBundle \ Entity \ Category не может быть преобразован в строку». Можете ли вы показать полную трассировку стека для этой ошибки? – xabbuh

Смежные вопросы