Doctrine – 1:N vazba – setter vrací ‚Expected value of type for association field‘
- Dan Hundrt
- Člen | 74
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
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();