30 public static function getManyToOne($instance, $member, $useCache=NULL) {
32 if($fieldAnnot!==null){
33 $field=$fieldAnnot[0];
35 $annotationArray=$fieldAnnot[1];
36 $member=$annotationArray[
"member"];
38 $kv=array ($key => $value );
39 $obj=self::getOne($annotationArray[
"className"], $kv,
false,
false, $useCache);
41 Logger::log(
"getManyToOne",
"Chargement de " . $member .
" pour l'objet " . \get_class($instance));
42 $accesseur=
"set" . ucfirst($member);
43 if (method_exists($instance, $accesseur)) {
44 $instance->$accesseur($obj);
45 $instance->_rest[$member]=$obj->_rest;
53 $elementAccessor=
"get" . ucfirst($mappedBy);
54 foreach ( $array as $element ) {
55 $elementRef=$element->$elementAccessor();
56 if (!is_null($elementRef)) {
58 if ($idElementRef == $fkv)
71 public static function getOneToMany($instance, $member, $useCache=NULL, $annot=null) {
73 $class=get_class($instance);
76 if ($annot !==
false) {
78 if ($fkAnnot !==
false) {
80 $ret=self::getAll($annot[
"className"], $fkAnnot[
"name"] .
"='" . $fkv .
"'",
true,
false, $useCache);
81 self::setToMember($member, $instance, $ret, $class,
"getOneToMany");
95 $class=get_class($instance);
96 if (!isset($mappedBy)){
98 $mappedBy=$annot[
"mappedBy"];
100 if ($mappedBy !==
false) {
102 self::_getOneToManyFromArray($ret, $array, $fkv, $mappedBy);
103 self::setToMember($member, $instance, $ret, $class,
"getOneToMany");
108 private static function setToMember($member, $instance, $value, $class, $part) {
109 $accessor=
"set" . ucfirst($member);
110 if (method_exists($instance, $accessor)) {
111 Logger::log($part,
"Affectation de " . $member .
" pour l'objet " . $class);
112 $instance->$accessor($value);
113 $instance->_rest[$member]=$value;
115 Logger::warn($part,
"L'accesseur " . $accessor .
" est manquant pour " . $class);
127 public static function getManyToMany($instance, $member,$array=null,$useCache=NULL){
129 $class=get_class($instance);
131 if ($parser->init()) {
132 if (is_null($array)) {
133 $accessor=
"get" . ucfirst($parser->getMyPk());
134 $condition=
" INNER JOIN `" . $parser->getJoinTable() .
"` on `".$parser->getJoinTable().
"`.`".$parser->getFkField().
"`=`".$parser->getTargetEntityTable().
"`.`".$parser->getPk().
"` WHERE `".$parser->getJoinTable().
"`.`". $parser->getMyFkField() .
"`='" . $instance->$accessor() .
"'";
135 $ret=self::getAll($parser->getTargetEntityClass(),$condition,
true,
false,$useCache);
137 self::getManyToManyFromArray($ret, $instance, $array, $class, $parser);
139 self::setToMember($member, $instance, $ret, $class,
"getManyToMany");
151 $manyToManyFields=$metaDatas[
"#manyToMany"];
152 if(\
sizeof($manyToManyFields)>0){
153 foreach ($manyToManyFields as $member){
154 self::getManyToMany($instance, $member,$array,$useCache);
161 $accessorToMember=
"get" . ucfirst($parser->getInversedBy());
162 $myPkAccessor=
"get" . ucfirst($parser->getMyPk());
164 if (!method_exists($instance, $myPkAccessor)) {
165 Logger::warn(
"ManyToMany",
"L'accesseur au membre clé primaire " . $myPkAccessor .
" est manquant pour " . $class);
167 if (
count($array) > 0)
168 $continue=method_exists($array[0], $accessorToMember);
170 foreach ( $array as $targetEntityInstance ) {
171 $instances=$targetEntityInstance->$accessorToMember();
172 if (is_array($instances)) {
173 foreach ( $instances as $inst ) {
174 if ($inst->$myPkAccessor() == $instance->$myPkAccessor())
175 array_push($ret, $targetEntityInstance);
180 Logger::warn(
"ManyToMany",
"L'accesseur au membre " . $parser->getInversedBy() .
" est manquant pour " . $parser->getTargetEntity());
193 public static function getAll($className, $condition=
'', $loadManyToOne=
true, $loadOneToMany=
false,$useCache=NULL) {
195 $invertedJoinColumns=null;
196 $oneToManyFields=null;
198 $tableName=$metaDatas[
"#tableName"];
199 if ($loadManyToOne && isset($metaDatas[
"#invertedJoinColumn"]))
200 $invertedJoinColumns=$metaDatas[
"#invertedJoinColumn"];
201 if ($loadOneToMany && isset($metaDatas[
"#oneToMany"])) {
202 $oneToManyFields=$metaDatas[
"#oneToMany"];
205 $members=\array_diff($metaDatas[
"#fieldNames"],$metaDatas[
"#notSerializable"]);
206 $query=self::$db->prepareAndExecute($tableName, $condition,$members,$useCache);
207 Logger::log(
"getAll",
"SELECT * FROM " . $tableName . $condition);
208 $oneToManyQueries=[];
209 $manyToOneQueries=[];
211 foreach ( $query as $row ) {
212 $object=self::loadObjectFromRow($row, $className, $invertedJoinColumns, $oneToManyFields,$members, $oneToManyQueries,$manyToOneQueries);
214 $objects[$key]=$object;
217 if($loadManyToOne && \
sizeof($manyToOneQueries)>0){
218 self::_affectsObjectsFromArray($manyToOneQueries, $objects,
function($object,$member,$manyToOneObjects,$fkField){
219 self::affectsManyToOneFromArray($object,$member,$manyToOneObjects,$fkField);
223 if($loadOneToMany && \
sizeof($oneToManyQueries)>0){
224 self::_affectsObjectsFromArray($oneToManyQueries, $objects,
function($object,$member,$relationObjects,$fkField){
225 self::affectsOneToManyFromArray($object,$member,$relationObjects,$fkField);
232 foreach ($queries as $key=>$conditions){
233 list($class,$member,$fkField)=\explode(
"|", $key);
234 $condition=\implode(
" OR ", $conditions);
235 $relationObjects=self::getAll($class,$condition,
true,
false,$useCache);
236 foreach ($objects as $object){
237 $affectsCallback($object, $member,$relationObjects,$fkField);
243 $class=\get_class($object);
244 if(isset($object->$fkField)){
245 $value=$manyToOneObjects[$object->$fkField];
246 self::setToMember($member, $object, $value, $class,
"getManyToOne");
260 private static function loadObjectFromRow($row, $className, $invertedJoinColumns, $oneToManyFields, $members,&$oneToManyQueries,&$manyToOneQueries) {
262 foreach ( $row as $k => $v ) {
263 if(($field=\array_search($k, $members))!==
false){
264 $accesseur=
"set" . ucfirst($field);
265 if (method_exists($o, $accesseur)) {
270 if (isset($invertedJoinColumns) && isset($invertedJoinColumns[$k])) {
273 self::prepareManyToOne($manyToOneQueries,$v, $fk,$invertedJoinColumns[$k]);
276 if (isset($oneToManyFields)) {
277 foreach ( $oneToManyFields as $k => $annot ) {
278 self::prepareOneToMany($oneToManyQueries,$o, $k, $annot);
293 $class=get_class($instance);
296 if ($annot !==
false) {
298 if ($fkAnnot !==
false) {
300 $key=$annot[
"className"].
"|".$member.
"|".$annot[
"mappedBy"];
301 if(!isset($ret[$key])){
304 $ret[$key][$fkv]=$fkAnnot[
"name"] .
"='" . $fkv .
"'";
317 $member=$annotationArray[
"member"];
319 $key=$annotationArray[
"className"].
"|".$member.
"|".$fkField;
320 if(!isset($ret[$key])){
323 $ret[$key][$value]=$fk .
"='" . $value .
"'";
332 public static function count($className, $condition=
'') {
334 if ($condition !=
'')
335 $condition=
" WHERE " . $condition;
336 return self::$db->query(
"SELECT COUNT(*) FROM " . $tableName . $condition)->fetchColumn();
348 public static function getOne($className, $keyValues, $loadManyToOne=
true, $loadOneToMany=
false, $useCache=NULL) {
349 if (!is_array($keyValues)) {
350 if (strrpos($keyValues,
"=") ===
false && strrpos($keyValues,
">") ===
false && strrpos($keyValues,
"<") ===
false) {
356 if(\stripos($condition,
" limit ")===
false)
358 $retour=self::getAll($className, $condition.$limit, $loadManyToOne, $loadOneToMany,$useCache);
359 if (
sizeof($retour) < 1){
362 return \reset($retour);
376 public static function connect($dbType,$dbName, $serverName=
"127.0.0.1", $port=
"3306", $user=
"root", $password=
"", $options=[],$cache=
false) {
377 self::$db=
new Database($dbType,$dbName, $serverName, $port, $user, $password, $options,$cache);
379 self::$db->connect();
380 }
catch (\Exception $e) {
static getMemberJoinColumns($instance, $member, $metaDatas=NULL)
static _affectsObjectsFromArray($queries, $objects, $affectsCallback, $useCache=NULL)
static checkWhere($condition)
static getManyToOne($instance, $member, $useCache=NULL)
Loads member associated with $instance by a ManyToOne type relationship.
Trait for DAO Updates (Create, Update, Delete)
static error($id, $message, $code=0)
static getOne($className, $keyValues, $loadManyToOne=true, $loadOneToMany=false, $useCache=NULL)
Returns an instance of $className from the database, from $keyvalues values of the primary key...
static setToMember($member, $instance, $value, $class, $part)
static getAnnotationInfoMember($class, $keyAnnotation, $member)
static connect($dbType, $dbName, $serverName="127.0.0.1", $port="3306", $user="root", $password="", $options=[], $cache=false)
Establishes the connection to the database using the past parameters.
static getCondition($keyValues, $classname=NULL, $separator=" AND ")
static affectsOneToManyFromArray($instance, $member, $array=null, $mappedBy=null)
static getFirstKey($class)
static getManyToManyFromArray(&$ret, $instance, $array, $class, $parser)
static prepareManyToOne(&$ret, $value, $fkField, $annotationArray)
Prepares members associated with $instance with a manyToOne type relationship.
static getFirstKeyValue($instance)
static getManyToMany($instance, $member, $array=null, $useCache=NULL)
Assigns / loads the child records in the $member member of $instance.
static getAll($className, $condition='', $loadManyToOne=true, $loadOneToMany=false, $useCache=NULL)
Returns an array of $className objects from the database.
static count($className, $condition='')
Returns the number of objects of $className from the database respecting the condition possibly passe...
static getMemberValue($instance, $member)
static isConnected()
Returns true if the connection to the database is estabished.
static log($id, $message, $code=0)
static getModelMetadata($className)
static getTableName($class)
static warn($id, $message, $code=0)
static affectsManyToOneFromArray($object, $member, $manyToOneObjects, $fkField)
static getOneToMany($instance, $member, $useCache=NULL, $annot=null)
Assign / load the child records in the $member member of $instance.
static prepareOneToMany(&$ret, $instance, $member, $annot=null)
Prepares members associated with $instance with a oneToMany type relationship.
static loadObjectFromRow($row, $className, $invertedJoinColumns, $oneToManyFields, $members, &$oneToManyQueries, &$manyToOneQueries)
static _getOneToManyFromArray(&$ret, $array, $fkv, $mappedBy)
static affectsManyToManys($instance, $array=NULL, $useCache=NULL)