我有三个简单的实体:RecipeEntity
,IngredientEntity
和FoodEntity
。
正如我理解正确的学说关联RecipeEntity
应该与IngredientEntity
有一个双向 oneToMany关系,因为一个食谱包含许多成分。
一种成分只含有一种食物,因此我假设从成分到食物的单向关联。
作为ID,我使用Uuids而不是使用第三方库的整数,这通常可以正常工作。
现在,我的SQL数据库中充满了指向食物成分的食谱。 当我打电话给食谱时,我可以找回食材。 循环遍历各个成分时,我可以将配方(双向关联)作为对象访问。
但是,当我想要访问食物时,我没有像我期望的那样获得FoodEntity
个对象,而只获得食物的id(这是一个对象)本身是因为使用了uuid库。
为什么我没有获得FoodEntity
个对象?
有什么问题?
干杯, LT
这就是我所拥有的(减少了更好的可读性):
/**
* Class RecipeEntity
*
* @ORM\Entity(repositoryClass="RecipeRepository")
* @ORM\Table(name="recipe")
*
*/
class RecipeEntity implements ArraySerializableInterface
{
/**
* @ORM\Column(name="id", type="uuid")
* @ORM\Id
* @ORM\GeneratedValue(strategy="UUID")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="IngredientEntity", mappedBy="recipe")
*/
private $ingredients;
public function __construct()
{
$this->ingredients = new ArrayCollection();
}
/**
* @return Collection
*/
public function getIngredients()
{
return $this->ingredients;
}
}
/**
* Class IngredientEntity
*
* @ORM\Entity
* @ORM\Table(name="ingredient", indexes={@ORM\Index(name="recipe_id", columns={"recipe_id"}), @ORM\Index(name="food_id", columns={"food_id"})})
*/
class IngredientEntity implements ArraySerializableInterface
{
/**
* @ORM\Column(name="id", type="uuid")
* @ORM\Id
* @ORM\GeneratedValue(strategy="UUID")
*/
private $id;
/**
* @ORM\Column(name="recipe_id", type="uuid")
* @ORM\ManyToOne(targetEntity="RecipeEntity", inversedBy="ingredients")
*/
private $recipe;
/**
* @ORM\Column(name="food_id", type="uuid")
* @ORM\OneToOne(targetEntity="FoodEntity")
*/
private $food;
}
/**
* Class FoodEntity
*
* @ORM\Table(name="food", indexes={@ORM\Index(name="source_id", columns={"source_id"})})
* @ORM\Entity(repositoryClass="LT\Model\Repository\FoodRepository")
*/
class FoodEntity implements ArraySerializableInterface
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="uuid")
* @ORM\GeneratedValue(strategy="UUID")
*/
private $id;
}
答案 0 :(得分:1)
您犯的错误是您同时添加了@Column
和@OneToOne
(如果是食物)和@ManyToOne
(如果是食谱)。属性是关系/关联或字段/列,而不是两者。
您应该从实体定义中的关联中删除@Column
注释。
/**
* Class IngredientEntity
*
* @ORM\Entity
* @ORM\Table(name="ingredient", indexes={@ORM\Index(name="recipe_id", columns={"recipe_id"}), @ORM\Index(name="food_id", columns={"food_id"})})
*/
class IngredientEntity implements ArraySerializableInterface
{
/**
* @ORM\Column(name="id", type="uuid")
* @ORM\Id
* @ORM\GeneratedValue(strategy="UUID")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="RecipeEntity", inversedBy="ingredients")
*/
private $recipe;
/**
* @ORM\OneToOne(targetEntity="FoodEntity")
*/
private $food;
}