Hello,
Voila je cherche a créer un bundle de Tag.

Admettons que l'on ne sache pas le nombre et le nom des entités qui seront lié à cette entité Tag. C'est à dire qu'elle pourra être lié a une seule entité, comme à plusieurs entités.

Une personne m'a mise sur la piste. Alors j'ai créer une interface Taggable, puis une Class abstraite Tagging qui implements l'interface et qui est une InheritanceType en mode SINGLE_TABLE et un discriminatorColumn pour pouvoir distinguer courante l'entité lié. Et donc les entités qui pourront avoir des Tag hérite de la classe abstraite Tagging.

-1)Le problème c'est que tous les champs des entités lié ce retrouve dans la classe Tagging.

Par exemple si j'ai une entité Post qui contient les champs name,slug,content qui hérite de Tagging alors tous les champs que je viens de citer vont se retrouvé dans la table Tagging en base de données. Ce qui n'est vraiment pas pratique :/

-2)Ensuite lorsque je veux récupérer les posts, doctrine ne va pas chercher dans la table post mais Tagging.

Si quelqu'un pouvait m'éclairer sur ces points ce serait sympa.

Je vous met le code de mes classes:

L'interface :

<?php
interface Taggable {

    public function getId();
    public function setModelId($modelId);
    public function getModelId();
    public function setTag(Tag $tag = null);
    public function getTag();
}
?>

Ma class abstraite Tagging:

<?php
/**
 * @ORM\Entity
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="type", type="string")
 * @ORM\DiscriminatorMap({"tagging"="Tagging","post"="Post","recipe"="Recipe"})
 */
abstract class Tagging implements Taggable{

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var integer
     *
     * @ORM\Column(name="model_id", type="integer",nullable=true)
     */
    protected $modelId;
    /**
     * @ORM\ManyToOne(targetEntity="Tag")
     */
    protected $tag;

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

    /**
     * Set model
     *
     * @param $modelId
     * @internal param int $modelId
     * @return Tagging
     */
    public function setModelId($modelId)
    {
        $this->modelId = $modelId;

        return $this;
    }

    /**
     * Get model
     *
     * @return integer 
     */
    public function getModelId()
    {
        return $this->modelId;
    }

    /**
     * Set tag
     *
     * @param Tag $tag
     * @return Tagging
     */
    public function setTag( Tag $tag = null)
    {
        $this->tag = $tag;

        return $this;
    }

    /**
     * Get tag
     *
     * @return Tag 
     */
    public function getTag()
    {
        return $this->tag;
    }
}
?>

Merci d'avance :)

Aucune réponse