protected function _initializeLink($attributName, $params = array()) { $attributLinkShema = $this->_shema->get($attributName)->getLink(); $typeLink = $attributLinkShema->getTypeLink(); $linkedTable = $this->_tableManager->get($attributLinkShema->getLinkedTable()); $linkedColumn = $attributLinkShema->getLinkedColumn(); if ($typeLink->is('OneToMany') || $typeLink->is('ManyToMany')) { // recherche de la table des liens $tableLink = $attributLinkShema->getLinkTable(); // Si aucune définit, une table TableOrigin_LinkedTable est retournée $valueLinked = QueryBuilder::create()->select()->from($tableLink)->where('id_origin', '==', $this->_attributs['id']); $entities = $linkedTable->find(array($linkedColumn, $valueLinked), $params); } elseif ($typeLink->is('OneToOne') || $typeLink->is('ManyToOne')) { $entities = $linkedTable->find(array($linkedColumn, $this->_attributs['attributName']), $params); } return $entities; }
public function __call($name, array $params) { // Traitement du nom de la fonction $function = array(); $tmp = ""; foreach (str_split($name) as $key => $value) { if (ord($value) >= 65 && ord($value) <= 90) { array_push($function, strtolower($tmp)); $tmp = ""; } $tmp .= $value; } array_push($function, strtolower($tmp)); if ($function[0] == "find" && ($function[1] == "by" || $function[1] == "all")) { $cptWhere = 0; $requete = QueryBuilder::create()->from($this->getName()); if ($function[1] == "by") { $options = isset($params[1]) ? $params[1] : null; $requete->where($function[2], "IN", is_array($params[0]) ? $params[0] : array($params[0])); $cptWhere++; } else { $options = isset($params[0]) ? $params[0] : null; } $return = array(); if (isset($options["orderBy"])) { $requete->orderBy($options["orderBy"]); } if (isset($options["limit"])) { $start = is_array($options["limit"]) ? $options["limit"][0] : 0; $stop = is_array($options["limit"]) ? $options["limit"][1] : $options["limit"]; $requete->limit($start, $stop); } if (isset($options["where"])) { foreach ($options["where"] as $key => $value) { $nameFunctionWhere = $cptWhere == 0 ? "where" : "andWhere"; $requete->{$nameFunctionWhere}($value[0], $value[1], $value[2]); $cptWhere++; } } $data = $this->afterFind($requete->fetch(), $options); // Traitement par la classe fille foreach ($data as $key => $value) { $object = $this->tableManager->getEntityManager()->get($this->getName()); array_push($return, $object->populate($value)); } return new Collection($return); // if(count($return) > 0) // return (count($return) > 1 || $function[1] == "all") ? $return : $return[0] ; // else // return ($function[1] == "all") ? array() : false ; } else { return false; } }