public function init()
 {
     $member = $this->member;
     $instance = $this->instance;
     $class = get_class($instance);
     $annot = Reflexion::getAnnotationMember($class, $member, "ManyToMany");
     if ($annot != false) {
         $this->targetEntity = $annot->targetEntity;
         $this->inversedBy = strtolower($this->targetEntity) . "s";
         if (!is_null($annot->inversedBy)) {
             $this->inversedBy = $annot->inversedBy;
         }
         $this->targetEntityClass = get_class(new $this->targetEntity());
         $pk = OrmUtils::getFirstKey($this->targetEntityClass);
         $annotJoinTable = Reflexion::getAnnotationMember($class, $member, "JoinTable");
         $this->joinTable = $annotJoinTable->name;
         $joinColumnsAnnot = $annotJoinTable->joinColumns;
         $this->myFkField = "id" . OrmUtils::getTableName($class);
         $this->myPk = OrmUtils::getFirstKey($class);
         if (!is_null($joinColumnsAnnot)) {
             $this->myFkField = $joinColumnsAnnot->name;
             $this->myPk = $joinColumnsAnnot->referencedColumnName;
         }
         $this->targetEntityTable = OrmUtils::getTableName($this->targetEntity);
         $this->fkField = "id" . ucfirst($this->targetEntityTable);
         $this->pk = OrmUtils::getFirstKey($this->targetEntityClass);
         $inverseJoinColumnsAnnot = $annotJoinTable->inverseJoinColumns;
         if (!is_null($inverseJoinColumnsAnnot)) {
             $this->fkField = $inverseJoinColumnsAnnot->name;
             $this->pk = $inverseJoinColumnsAnnot->referencedColumnName;
         }
         return true;
     }
     return false;
 }
Esempio n. 2
0
 /**
  * Affecte/charge les enregistrements fils dans le membre $member de $instance.
  * Si $array est null, les fils sont chargés depuis la base de données
  * @param Classe $instance
  * @param string $member Membre sur lequel doit être présent une annotation OneToMany
  * @param array $array paramètre facultatif contenant la liste des fils possibles
  */
 public static function getOneToMany($instance, $member, $array = null)
 {
     $ret = array();
     $class = get_class($instance);
     $annot = Reflexion::getAnnotationMember($class, $member, "OneToMany");
     if ($annot != false) {
         $fk = Reflexion::getAnnotationMember($annot->className, $annot->mappedBy, "JoinColumn");
         $fkv = OrmUtils::getFirstKeyValue($instance);
         if (is_null($array)) {
             $ret = DAO::getAll($annot->className, $fk->name . "='" . $fkv . "'");
         } else {
             $elementAccessor = "get" . ucfirst($annot->mappedBy);
             foreach ($array as $element) {
                 $elementRef = $element->{$elementAccessor}();
                 if (!is_null($elementRef)) {
                     $idElementRef = OrmUtils::getFirstKeyValue($elementRef);
                     if ($idElementRef == $fkv) {
                         $ret[] = $element;
                     }
                 }
             }
         }
         $accessor = "set" . ucfirst($member);
         if (method_exists($instance, $accessor)) {
             \Logger::log("getOneToMany", "Chargement de " . $member . " pour l'objet " . $class);
             $instance->{$accessor}($ret);
         } else {
             \Logger::warn("getOneToMany", "L'accesseur " . $accessor . " est manquant pour " . $class);
         }
     }
     return $ret;
 }