Doctrine – 1:N vazba – setter vrací ‚Expected value of type for association field‘

Dan Hundrt
Člen | 74
+
0
-

Zdravím, mám 2 entity (Kategorie a Produkt):

<?php

namespace App;

use Doctrine\ORM\Mapping as ORM;
/**
 * @ORM\Entity
 * @ORM\Table(options={"collate"="utf8_general_ci"})
 */
class Products
{
	/**
	 * @ORM\Id
	 * @ORM\Column(type="integer",  unique=true)
	 * @ORM\GeneratedValue
	 */
	protected $id;

	/**
	 * @ORM\ManyToOne(targetEntity="Category", inversedBy="permissions", cascade={"persist"})
	 * @ORM\JoinColumn(name="category", referencedColumnName="id", onDelete="SET NULL")
	 */
	protected $category;

	/**
	 * @return mixed
	 */
	public function getCategory()
	{
		return $this->category;
	}

	/**
	 * @param mixed $category
	 */
	public function setCategory($category)
	{
		$this->category = $category;
	}
}

Kategorie:

<?php

namespace App;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(options={"collate"="utf8_general_ci"})
 */
class Category
{
	/**
	 * @ORM\Id
	 * @ORM\Column(type="integer",  unique=true)
	 * @ORM\GeneratedValue
	 */
	protected $id;
}

Pokud se pokusím uložit data:

			$product = new Products();
			$product->setCategory($data->category);
			$this->em->persist($product);
			$this->em->flush();

Laděnka vrátí:

Expected value of type "App\Category" for association field "App\Products#$category", got "integer" instead

Data v setteru jsou, je naplněný ID kategorie, která existuje. Nevíte, kde by mohl být problém? Cizí klíče jsou nastavené v pořádku:

https://s18.postimg.org/…_4.56.17.png

Editoval Dan Hundrt (29. 12. 2017 5:00)

Matey
Člen | 142
+
+2
-

Ahoj, ono stačí prečítať tú chybovú hlášku, doctrina očakáva že dostane objekt Category, nie ID z existujúcej kategorie.

takže getter a setter upraviť, aby ti to napovedalo typ parametru

	/**
 * @return Category
 */
public function getCategory()
{
    return $this->category;
}

/**
 * @param Category $category
 */
public function setCategory($category)
{
    $this->category = $category;
}

a pridávanie kategorie potom vypada

$category = $this->em->getRespository(Category::class)->find($data->category);
$product = new Products();
$product->setCategory($category);
$this->em->persist($product);
$this->em->flush();
Dan Hundrt
Člen | 74
+
0
-

Díky!