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; }
/** * Insère $instance dans la base de données * @param Classe $instance instance à insérer * @param $insertMany si vrai, sauvegarde des instances reliées à $instance par un ManyToMany */ public static function insert($instance, $insertMany = false) { $tableName = OrmUtils::getTableName(get_class($instance)); $keyAndValues = Reflexion::getPropertiesAndValues($instance); $keyAndValues = array_merge($keyAndValues, OrmUtils::getManyToOneMembersAndValues($instance)); $sql = "INSERT INTO " . $tableName . "(" . SqlUtils::getInsertFields($keyAndValues) . ") VALUES(" . SqlUtils::getInsertFieldsValues($keyAndValues) . ")"; \Logger::log("insert", $sql); \Logger::log("Key and values", json_encode($keyAndValues)); $statement = DAO::$db->prepareStatement($sql); foreach ($keyAndValues as $key => $value) { DAO::$db->bindValueFromStatement($statement, $key, $value); } $result = $statement->execute(); if ($result) { $accesseurId = "set" . ucfirst(OrmUtils::getFirstKey(get_class($instance))); $instance->{$accesseurId}(DAO::$db->lastInserId()); if ($insertMany) { DAO::insertOrUpdateAllManyToMany($instance); } } return $result; }