IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[Doctrine] Héritage Db et Doctrine


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2005
    Messages : 98
    Points : 60
    Points
    60
    Par défaut [Doctrine] Héritage Db et Doctrine
    Bonjour à tous,

    J'ai un légé soucis pour utiliser les requêtes DQL avec Doctrine....


    J'ai un modèle de données comme suite :

    - Table :
    - tracked_object (id auto-inc, informations de màj de la donnée)
    - localized_value (id liée à tracked_object et code)
    - system_value (id liée à localized_value avec commentaire et ordre)
    - translation (id auto inc, fk localized_value, fk system_value pour la locale et valeur traduite)

    - Entities :
    - TrackedObject
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    <?php
    /**
     * PHP version 5.3
     * 
     * @category   Gdp
     * @package    Gdp_Entity
     * @version    SVN:$Id: TrackedObject.php 2 2013-02-13 10:44:11Z 16660 $
     * @author     16660
     */
    namespace Gdp\Entity;
     
    use Doctrine\ORM\Mapping\PrePersist;
    use Doctrine\ORM\Mapping\PreUpdate;
    use Doctrine\ORM\Mapping\PostPersist;
    use Doctrine\ORM\Mapping as ORM;
    use \Gdp\Doctrine\DBAL\Types;
    use \Gdp\Entity\TrackedObject;
    use \Gdp\Entity\TrackedObject\LocalizedValue;
     
     
    /**
     * TrackedObject
     * 
     * @category   Gdp
     * @package    Gdp_Entity
     * @author     16660
     * @version    Release:1.0
     * 
     * @ORM\Table(name="tracked_object")
     * @ORM\Entity
     * @ORM\InheritanceType("JOINED")
     * @ORM\DiscriminatorColumn(name="system_type_id")
     * @ORM\DiscriminatorMap({
     * 	"1" = "Gdp\Entity\TrackedObject", 
     * 	"2" = "Gdp\Entity\TrackedObject\LocalizedValue", 
     * 	"3" = "Gdp\Entity\TrackedObject\LocalizedValue\SystemValue", 
     *  "4" = "Gdp\Entity\TrackedObject\LocalizedValue\SystemValue\Locale"
     *  })
     * @ORM\HasLifecycleCallbacks
     */
    class TrackedObject
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer", nullable=false)
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="IDENTITY")
         */
        private $id;
     
        /**
         * @var \Zend_Date
         *
         * @ORM\Column(name="creation_date", type="zenddate", nullable=false)
         */
        private $_creationDate;
     
        /**
         * @var \User
         *
         * @ORM\Column(name="creator_id", type="string", length=100, nullable=false)
         */
        private $_creator;
     
        /**
         * @var \Zend_Date
         *
         * @ORM\Column(name="update_date", type="zenddate", nullable=true)
         */
        private $_updateDate;
     
        /**
         * @var \User
         *
         * @ORM\Column(name="updator_id", type="string", length=100, nullable=true)
         */
        private $_updator;
     
        /**
         * Constructor
         */
        public function __construct()
        {
     
        }
     
        /**
         * Get id
         *
         * @return integer 
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Get creationDate
         *
         * @return \Zend_Date 
         */
        public function getCreationDate()
        {
            return $this->_creationDate;
        }
     
        /**
         * Get creator
         *
         * @return \User 
         */
        public function getCreator()
        {
            return $this->_creator;
        }
     
        /**
         * Get updateDate
         *
         * @return \Zend_Date 
         */
        public function getUpdateDate()
        {
            return $this->_updateDate;
        }
     
        /**
         * Get updator
         *
         * @return \User 
         */
        public function getUpdator()
        {
            return $this->_updator;
        }
     
        /**
         * @ORM\PrePersist
         * @return void
         */
        public function prePersist()
        {
        	$this ->_creationDate = new \Zend_Date();
        	$this -> _creator = \Zend_Registry::get(\Nsf_Application_Resource_Loggeduser::DEFAULT_REGISTRY_KEY);
        }
     
        /**
         * @ORM\PreUpdate
         * @return void
         */
        public function preUpdate()
        {
        	$this ->_updateDate = new \Zend_Date();
        	$this -> _updator = \Zend_Registry::get(\Nsf_Application_Resource_Loggeduser::DEFAULT_REGISTRY_KEY);
        }
    }
    - LocalizedValue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    <?php
    /**
     * PHP version 5.3
     * 
     * @category   Gdp
     * @package    Gdp_Entity
     * @version    SVN:$Id: LocalizedValue.php 2 2013-02-13 10:44:11Z 16660 $
     * @author     16660
     */
    namespace Gdp\Entity\TrackedObject;
     
    use Gdp\Entity\TrackedObject;
     
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * LocalizedValue
     * 
     * @category   Gdp
     * @package    Gdp_Entity
     * @author     16660
     * @version    Release:1.0
     * 
     * @ORM\Table(name="localized_value")
     * @ORM\Entity
     * 
     */
    class LocalizedValue extends TrackedObject
    {
        /**
         * @var string
         *
         * @ORM\Column(name="code", type="string", length=100, nullable=false)
         */
        private $code;
     
        /**
         * @var integer
         *
         * @ORM\Column(name="status", type="integer", nullable=false)
         */
        private $status;
     
        /**
         * @var \TrackedObject
         *
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="NONE")
         * @ORM\OneToOne(targetEntity="Gdp\Entity\TrackedObject")
         * @ORM\JoinColumns({
         *   @ORM\JoinColumn(name="id", referencedColumnName="id")
         * })
         */
        private $id;
     
     
        /**
         * Set code
         *
         * @param string $code
         * @return LocalizedValue
         */
        public function setCode($code)
        {
            $this->code = $code;
     
            return $this;
        }
     
        /**
         * Get code
         *
         * @return string 
         */
        public function getCode()
        {
            return $this->code;
        }
     
        /**
         * Set status
         *
         * @param integer $status
         * @return LocalizedValue
         */
        public function setStatus($status)
        {
            $this->status = $status;
     
            return $this;
        }
     
        /**
         * Get status
         *
         * @return integer 
         */
        public function getStatus()
        {
            return $this->status;
        }
     
        /**
         * Set id
         *
         * @param \TrackedObject $id
         * @return LocalizedValue
         */
        public function setId(\TrackedObject $id)
        {
            $this->id = $id;
     
            return $this;
        }
     
        /**
         * Get id
         *
         * @return \TrackedObject 
         */
        public function getId()
        {
            return $this->id;
        }
    }
    - SystemValue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    <?php
    /**
     * PHP version 5.3
     * 
     * @category   Gdp
     * @package    Gdp_Entity
     * @version    SVN:$Id: SystemValue.php 2 2013-02-13 10:44:11Z 16660 $
     * @author     16660
     */
    namespace Gdp\Entity\TrackedObject\LocalizedValue;
     
    use Gdp\Entity\TrackedObject\LocalizedValue;
     
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * SystemValue
     * 
     * @category   Gdp
     * @package    Gdp_Entity
     * @author     16660
     * @version    Release:1.0
     * 
     * @ORM\Table(name="system_value")
     * @ORM\Entity
     * 
     */
    class SystemValue extends LocalizedValue
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="order", type="integer", nullable=false)
         */
        private $order;
     
        /**
         * @var \LocalizedValue
         *
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="NONE")
         * @ORM\OneToOne(targetEntity="Gdp\Entity\TrackedObject\LocalizedValue")
         * @ORM\JoinColumns({
         *   @ORM\JoinColumn(name="id", referencedColumnName="id")
         * })
         */
        private $id;
     
     
        /**
         * @var \LocalizedValue
         *
         * @ORM\ManyToOne(targetEntity="Gdp\Entity\TrackedObject\LocalizedValue")
         * @ORM\JoinColumns({
         *   @ORM\JoinColumn(name="comment_id", referencedColumnName="id")
         * })
         */
        private $comment;
     
        /**
         * Constructor
         */
        public function __construct()
        {
        }
     
        /**
         * Set order
         *
         * @param integer $order
         * @return SystemValue
         */
        public function setOrder($order)
        {
            $this->order = $order;
     
            return $this;
        }
     
        /**
         * Get order
         *
         * @return integer 
         */
        public function getOrder()
        {
            return $this->order;
        }
     
        /**
         * Set id
         *
         * @param \LocalizedValue $id
         * @return SystemValue
         */
        public function setId(\LocalizedValue $id)
        {
            $this->id = $id;
     
            return $this;
        }
     
        /**
         * Get id
         *
         * @return \LocalizedValue 
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Set comment
         *
         * @param \LocalizedValue $comment
         * @return SystemValue
         */
        public function setComment(\LocalizedValue $comment = null)
        {
            $this->comment = $comment;
     
            return $this;
        }
     
        /**
         * Get comment
         *
         * @return \LocalizedValue 
         */
        public function getComment()
        {
            return $this->comment;
        }
    }
    - Locale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
    /**
     * PHP version 5.3
     * 
     * @category   Gdp
     * @package    Gdp_Entity
     * @version    SVN:$Id: Locale.php 2 2013-02-13 10:44:11Z 16660 $
     * @author     16660
     */
    namespace Gdp\Entity\TrackedObject\LocalizedValue\SystemValue;
     
    use Gdp\Entity\TrackedObject\LocalizedValue\SystemValue;
     
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * SystemValue
     * 
     * @category   Gdp
     * @package    Gdp_Entity
     * @author     16660
     * @version    Release:1.0
     * 
     * @ORM\Table(name="system_value")
     * @ORM\Entity
     */
    class Locale extends SystemValue
    {
        /**
         * Constructor
         */
        public function __construct()
        {
        }
    }
    - Translation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    <?php
    /**
     * PHP version 5.3
     * 
     * @category   Gdp
     * @package    Gdp_Entity
     * @version    SVN:$Id$
     * @author     16660
     */
    namespace Gdp\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * Translation
     * 
     * @category   Gdp
     * @package    Gdp_Entity
     * @author     16660
     * @version    Release:1.0
     * 
     * 
     * @ORM\Table(name="translation")
     * @ORM\Entity(repositoryClass="Gdp\Repository\Translation")
     * @ORM\HasLifecycleCallbacks
     */
    class Translation
    {
        /**
         * @var string
         *
         * @ORM\Column(name="value", type="text", nullable=true)
         */
        private $value;
     
        /**
         * @var \LocalizedValue
         *
         * @ORM\ManyToOne(targetEntity="Gdp\Entity\TrackedObject\LocalizedValue")
         * @ORM\JoinColumns({
         *   @ORM\JoinColumn(name="localized_value_id", referencedColumnName="id")
         * })
         */
        private $localizedValue;
     
        /**
         * @var \SystemValue
         *
         * @ORM\ManyToOne(targetEntity="Gdp\Entity\TrackedObject\LocalizedValue\SystemValue")
         * @ORM\JoinColumns({
         *   @ORM\JoinColumn(name="locale_id", referencedColumnName="id")
         * })
         */
        private $locale;
     
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer", nullable=false)
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="IDENTITY")
         */
        private $id;
     
     
        /**
         * Set value
         *
         * @param string $value
         * @return Translation
         */
        public function setValue($value)
        {
            $this->value = $value;
     
            return $this;
        }
     
        /**
         * Get value
         *
         * @return string 
         */
        public function getValue()
        {
            return $this->value;
        }
     
        /**
         * Set localizedValue
         *
         * @param \LocalizedValue $localizedValue
         * @return Translation
         */
        public function setLocalizedValue(\LocalizedValue $localizedValue = null)
        {
            $this->localizedValue = $localizedValue;
     
            return $this;
        }
     
        /**
         * Get localizedValue
         *
         * @return \LocalizedValue 
         */
        public function getLocalizedValue()
        {
            return $this->localizedValue;
        }
     
        /**
         * Set locale
         *
         * @param \SystemValue $locale
         * @return Translation
         */
        public function setLocale(\SystemValue $locale = null)
        {
            $this->locale = $locale;
     
            return $this;
        }
     
        /**
         * Get locale
         *
         * @return \SystemValue 
         */
        public function getLocale()
        {
            return $this->locale;
        }
     
        /**
         * Set id
         *
         * @param \TrackedObject $id
         * @return Translation
         */
        public function setId(\TrackedObject $id)
        {
            $this->id = $id;
     
            return $this;
        }
     
        /**
         * Get id
         *
         * @return \TrackedObject 
         */
        public function getId()
        {
            return $this->id;
        }
    }
    - Repositories :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?php
    /**
     * PHP version 5.3
     * 
     * @category   Gdp
     * @package    Gdp_Repository
     * @version    SVN:$Id$
     * @author     16660
     */
    namespace Gdp\Repository;
     
    use Doctrine\ORM\Query\ResultSetMapping;
     
    use Doctrine\ORM\EntityRepository;
    use Doctrine\DBAL\Query;
    use Gdp\Entity;
     
    /**
     * Translation repository
     * 
     * @category   Gdp
     * @package    Gdp_Repository
     * @author     16660
     * @version    Release:1.0
     */
    class Translation extends EntityRepository
    {
    	/**
    	 * Get application translation
    	 * @return array
    	 */
    	public function getTranslations(){
    		$query= $this -> _em->createQuery("SELECT t.value FROM \Gdp\Entity\Translation t JOIN t.locale l WHERE t.value LIKE '%F%'");
    		$translations = $query->getResult();
    		\Zend_Debug::dump($translations);
    		exit;
    	}
    }

    Bref, je fais ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $repository = $this -> _em->getRepository('\Gdp\Entity\Translation');
    $test = $repository -> findOneBy(array('id' => 1));
    Zend_Debug::dump($test);
    Je récupère l'entité complète avec toutes les dépendances sans aucune erreur.

    Quand je fais cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $query= $this -> _em->createQuery("SELECT t.value FROM \Gdp\Entity\Translation t JOIN t.locale l WHERE t.value LIKE '%F%'");
    $translations = $query->getResult();
    \Zend_Debug::dump($translations);
    exit;
    Bah c'est un échec critique :'(
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 's1_'' in /data/www/dev/16660/gdp/php/library/Doctrine/DBAL/Connection.php:646 Stack trace: #0 /data/www/dev/16660/gdp/php/library/Doctrine/DBAL/Connection.php(646): PDO->query('SELECT t0_.valu...') #1 /data/www/dev/16660/gdp/php/library/Doctrine/ORM/Query/Exec/SingleSelectExecutor.php(46): Doctrine\DBAL\Connection->executeQuery('SELECT t0_.valu...', Array, Array, NULL) #2 /data/www/dev/16660/gdp/php/library/Doctrine/ORM/Query.php(264): Doctrine\ORM\Query\Exec\SingleSelectExecutor->execute(Object(Doctrine\DBAL\Connection), Array, Array) #3 /data/www/dev/16660/gdp/php/library/Doctrine/ORM/AbstractQuery.php(737): Doctrine\ORM\Query->_doExecute() #4 /data/www/dev/16660/gdp/php/library/Doctrine/ORM/AbstractQuery.php(538): Doctrine\ORM\AbstractQuery->execute(NULL, 1) #5 /data/www/dev/16660/gdp/php/library/Gdp/Repository/Translation.php(34): Doctrine\ORM\AbstractQuery->getResult() #6 /data in /data/www/dev/16660/gdp/php/library/Doctrine/DBAL/DBALException.php on line 47
    Et la requête posant problème :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT 
        t0_.value AS value0
    FROM
        translation t0_
            INNER JOIN
        system_value s1_ ON t0_.locale_id = s1_.id
            LEFT JOIN
        localized_value l2_ ON s1_.id = l2_.id
            LEFT JOIN
        tracked_object t3_ ON s1_.id = t3_.id
            LEFT JOIN
        system_value s1_ ON s1_.id = s1_.id
    WHERE
        t0_.value LIKE '%F%'

    Au final, j'ai deux fois la jointure sur system_value, comme si l'entité Locale est jointe correctement mais qu'à la fin, vis à vis de l'entité systemValue il fait quand même une jointure.
    J'ai essayé le mapping single table pour cette entité mais .... échec (il sembelrait que le mix SINGLE_TABLE et CLASS TABLE soit impossible...)

    Quelqu'un aurait-il une idée ? En sachant derrière que certaines entitées qui héritent de system_value peuvent elles avoir une table de jointure.

    L'idée serait peut-être de créer deux entités distinctes permettant de gérer l'un des deux cas mais là on arrive à du lourd en terme de code.... et gérer une table locale juste avec un id en colonne est quelque peu incohérent....

    Merci d'avance pour vos réponses.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je suppose que cette horrible requête a été écrite automatiquement par l'Objet Réellement Merdique Doctrine ?

    Voici une requête suffisante pour le bon résultat cherché :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT
    	t0_.value AS value0
    FROM
    	translation t0_
            INNER JOIN
        system_value s1_ ON t0_.locale_id = s1_.id
    WHERE
        t0_.value LIKE '%F%'

    À noter que cette requête ne sera guère plus performante que celle vomie par Doctrine en cas de fort volume de données à traiter car LIKE '%F%' empêche l'utilisation de l'index éventuel sur t0_.value.

    Bref, il vaut mieux écrire ses propres requêtes que de faire aveuglément confiance à ces usines à gaz que sont les ORM !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2005
    Messages : 98
    Points : 60
    Points
    60
    Par défaut
    Merci CinePhil pour ta réponse mais le problème n'est pas, en soit, la construction de la requête (récupération de la traduction et de la locale associée ainsi que sa définition complète d'où le localized value et le tracked_object).

    Le but serait donc, via DQL à :
    - peut être éviter de récupérer tous les héritages (donc juste Translation et system_value)
    - ne pas faire en sorte qu'il rejoigne encore une fois sur system_value (c'est là le problème)

    Effectivement, un ORM construit des requêtes "moches" mais en fonction des entités métier que tu as définis.
    Pour le coup je pense que c'est le mix héritage par classe et héritage abstrait qui coince mais je ne suis pas expert de Doctrine donc.... :-)

    Et pour le LIKE "%F%" je suis le coupable car c'est pas la performance que je recherche mais juste un résultat

Discussions similaires

  1. Héritage et Mapping Doctrine 2.
    Par Ali Kent dans le forum Doctrine2
    Réponses: 0
    Dernier message: 19/01/2015, 22h48
  2. [2.x] Doctrine héritage count classe fille
    Par Echyzen dans le forum Symfony
    Réponses: 2
    Dernier message: 13/08/2014, 17h27
  3. [2.x] [Doctrine] héritage + relations
    Par damiensan dans le forum Symfony
    Réponses: 0
    Dernier message: 10/07/2013, 16h45
  4. [2.x] Multi-héritage doctrine 2
    Par rafleboss dans le forum Symfony
    Réponses: 3
    Dernier message: 18/01/2012, 13h48
  5. [1.x] Doctrine / Symfony --> php symfony doctrine:build --model
    Par jean58 dans le forum Débuter
    Réponses: 8
    Dernier message: 21/01/2011, 11h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo