J'ai trois entités simples: RecipeEntity
, IngredientEntity
et FoodEntity
.doctrine oneToOne unidirectionnel: objet mappé
Comme je comprends les associations de doctrine correctement RecipeEntity
devrait avoir une relation bidirectionnelle OneToMany -IngredientEntity
comme une recette contient de nombreux ingrédients. Un ingrédient contient exactement un aliment, donc je suppose une association unidirectionnelle de l'ingrédient à la nourriture. En tant qu'ID, j'ai Uuids au lieu d'entiers utilisant une bibliothèque tierce, ce qui fonctionne généralement bien.
Maintenant, j'ai ma base de données SQL rempli avec une recette pointant vers des ingrédients pointant vers la nourriture. Lorsque j'appelle une recette, je peux récupérer les ingrédients. Tout en faisant défiler les ingrédients, je peux accéder à la recette (bidirectionnelle association) comme un objet.
Mais, quand je veux accéder à la nourriture, je ne suis pas un objet FoodEntity
comme je l'aurais prévu, mais seulement l'id de la nourriture (qui est lui-même un objet à cause de la bibliothèque UUID qui est utilisé). Pourquoi n'ai-je pas d'objet FoodEntity
? Qu'est-ce qui ne va pas? J'espère que je me suis fait comprendre! Merci pour votre aide.
Cheers, LT.
C'est ce que je (réduit pour une meilleure lisibilité):
/**
* 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;
}
Merci Wilt, mille fois, qui fait l'affaire !!! – Lowtower
Le point exact !!! –
@Lowtower Vous êtes les bienvenus. – Wilt