Ubiquity  2.0.0
php rapid development framework
OrmUtils.php
Go to the documentation of this file.
1 <?php
2 
3 namespace Ubiquity\orm;
4 
9 
15 class OrmUtils {
16  private static $modelsMetadatas;
17 
18  public static function getModelMetadata($className) {
19  if (!isset(self::$modelsMetadatas[$className])) {
20  self::$modelsMetadatas[$className]=CacheManager::getOrmModelCache($className);
21  }
22  return self::$modelsMetadatas[$className];
23  }
24 
25  public static function isSerializable($class, $member) {
26  $ret=self::getAnnotationInfo($class, "#notSerializable");
27  if ($ret !== false)
28  return \array_search($member, $ret) === false;
29  else
30  return true;
31  }
32 
33  public static function isNullable($class, $member) {
34  $ret=self::getAnnotationInfo($class, "#nullable");
35  if ($ret !== false)
36  return \array_search($member, $ret) !== false;
37  else
38  return false;
39  }
40 
41  public static function getFieldName($class, $member) {
42  $ret=self::getAnnotationInfo($class, "#fieldNames");
43  if ($ret === false)
44  $ret=$member;
45  else
46  $ret=$ret[$member];
47  return $ret;
48  }
49 
50  public static function getFieldNames($model){
51  $fields=self::getAnnotationInfo($model, "#fieldNames");
52  $result=[];
53  $serializables=self::getSerializableFields($model);
54  foreach ($fields as $member=>$field){
55  if(\array_search($member, $serializables)!==false)
56  $result[$field]=$member;
57  }
58  return $result;
59  }
60 
61  public static function getTableName($class) {
62  if(isset(self::getModelMetadata($class)["#tableName"]))
63  return self::getModelMetadata($class)["#tableName"];
64  }
65 
66  public static function getKeyFieldsAndValues($instance) {
67  $kf=self::getAnnotationInfo(get_class($instance), "#primaryKeys");
68  return self::getMembersAndValues($instance, $kf);
69  }
70 
71  public static function getKeyFields($instance) {
72  if(!\is_string($instance)){
73  $instance=\get_class($instance);
74  }
75  return self::getAnnotationInfo($instance, "#primaryKeys");
76  }
77 
78  public static function getMembers($className) {
79  $fieldNames=self::getAnnotationInfo($className, "#fieldNames");
80  if ($fieldNames !== false)
81  return \array_keys($fieldNames);
82  return [ ];
83  }
84 
85  public static function getFieldTypes($className) {
86  $fieldTypes=self::getAnnotationInfo($className, "#fieldTypes");
87  if ($fieldTypes !== false)
88  return $fieldTypes;
89  return [ ];
90  }
91 
92  public static function getFieldType($className,$field){
93  $types= self::getFieldTypes($className);
94  if(isset($types[$field]))
95  return $types[$field];
96  return "int";
97  }
98 
99  public static function getMembersAndValues($instance, $members=NULL) {
100  $ret=array ();
101  $className=get_class($instance);
102  if (is_null($members))
103  $members=self::getMembers($className);
104  foreach ( $members as $member ) {
105  if (OrmUtils::isSerializable($className, $member)) {
106  $v=Reflexion::getMemberValue($instance, $member);
107  if (self::isNotNullOrNullAccepted($v, $className, $member)) {
108  $name=self::getFieldName($className, $member);
109  $ret[$name]=$v;
110  }
111  }
112  }
113  return $ret;
114  }
115 
116  public static function isNotNullOrNullAccepted($v, $className, $member) {
117  $notNull=UString::isNotNull($v);
118  return ($notNull) || (!$notNull && OrmUtils::isNullable($className, $member));
119  }
120 
121  public static function getFirstKey($class) {
122  $kf=self::getAnnotationInfo($class, "#primaryKeys");
123  return \reset($kf);
124  }
125 
126  public static function getFirstKeyValue($instance) {
127  $fkv=self::getKeyFieldsAndValues($instance);
128  return \reset($fkv);
129  }
130 
136  public static function getManyToOneMembersAndValues($instance) {
137  $ret=array ();
138  $class=get_class($instance);
139  $members=self::getAnnotationInfo($class, "#manyToOne");
140  if ($members !== false) {
141  foreach ( $members as $member ) {
142  $memberAccessor="get" . ucfirst($member);
143  if (method_exists($instance, $memberAccessor)) {
144  $memberInstance=$instance->$memberAccessor();
145  if (isset($memberInstance)) {
146  $keyValues=self::getKeyFieldsAndValues($memberInstance);
147  if (sizeof($keyValues) > 0) {
148  $fkName=self::getJoinColumnName($class, $member);
149  $ret[$fkName]=reset($keyValues);
150  }
151  }
152  }
153  }
154  }
155  return $ret;
156  }
157 
158  public static function getMembersWithAnnotation($class, $annotation) {
159  if (isset(self::getModelMetadata($class)[$annotation]))
160  return self::getModelMetadata($class)[$annotation];
161  return [ ];
162  }
163 
171  public static function exists($instance, $memberKey, $array) {
172  $accessor="get" . ucfirst($memberKey);
173  if (method_exists($instance, $accessor)) {
174  if ($array !== null) {
175  foreach ( $array as $value ) {
176  if ($value->$accessor() == $instance->$accessor())
177  return true;
178  }
179  }
180  }
181  return false;
182  }
183 
184  public static function getJoinColumnName($class, $member) {
185  $annot=self::getAnnotationInfoMember($class, "#joinColumn", $member);
186  if ($annot !== false) {
187  $fkName=$annot["name"];
188  } else {
189  $fkName="id" . ucfirst(self::getTableName(ucfirst($member)));
190  }
191  return $fkName;
192  }
193 
194  public static function getAnnotationInfo($class, $keyAnnotation) {
195  if (isset(self::getModelMetadata($class)[$keyAnnotation]))
196  return self::getModelMetadata($class)[$keyAnnotation];
197  return false;
198  }
199 
200  public static function getAnnotationInfoMember($class, $keyAnnotation, $member) {
201  $info=self::getAnnotationInfo($class, $keyAnnotation);
202  if ($info !== false) {
203  if(UArray::isAssociative($info)){
204  if (isset($info[$member])) {
205  return $info[$member];
206  }
207  }else{
208  if(\array_search($member, $info)!==false){
209  return $member;
210  }
211  }
212  }
213  return false;
214  }
215 
216  public static function getSerializableFields($class) {
217  $notSerializable=self::getAnnotationInfo($class, "#notSerializable");
218  $fieldNames=\array_keys(self::getAnnotationInfo($class, "#fieldNames"));
219  return \array_diff($fieldNames, $notSerializable);
220  }
221 
222  public static function getFieldsInRelations($class) {
223  $result=[ ];
224  if ($manyToOne=self::getAnnotationInfo($class, "#manyToOne")) {
225  $result=\array_merge($result, $manyToOne);
226  }
227  if ($oneToMany=self::getAnnotationInfo($class, "#oneToMany")) {
228  $result=\array_merge($result, \array_keys($oneToMany));
229  }
230  if ($manyToMany=self::getAnnotationInfo($class, "#manyToMany")) {
231  $result=\array_merge($result, \array_keys($manyToMany));
232  }
233  return $result;
234  }
235 
236  public static function getManyToOneFields($class) {
237  return self::getAnnotationInfo($class, "#manyToOne");
238  }
239 
240  public static function getManyToManyFields($class) {
241  $result=self::getAnnotationInfo($class, "#manyToMany");
242  if($result!==false)
243  return \array_keys($result);
244  return [];
245  }
246 
247  public static function getDefaultFk($classname) {
248  return "id" . \ucfirst(self::getTableName($classname));
249  }
250 
251  public static function getMemberJoinColumns($instance,$member,$metaDatas=NULL){
252  if(!isset($metaDatas)){
253  $class=get_class($instance);
254  $metaDatas=self::getModelMetadata($class);
255  }
256  $invertedJoinColumns=$metaDatas["#invertedJoinColumn"];
257  foreach ($invertedJoinColumns as $field=>$invertedJoinColumn){
258  if($invertedJoinColumn["member"]===$member){
259  return [$field,$invertedJoinColumn];
260  }
261  }
262  return null;
263  }
264 }
static getManyToOneMembersAndValues($instance)
Definition: OrmUtils.php:136
static getMemberJoinColumns($instance, $member, $metaDatas=NULL)
Definition: OrmUtils.php:251
static getFieldsInRelations($class)
Definition: OrmUtils.php:222
static getMembers($className)
Definition: OrmUtils.php:78
static getAnnotationInfo($class, $keyAnnotation)
Definition: OrmUtils.php:194
static getDefaultFk($classname)
Definition: OrmUtils.php:247
static getAnnotationInfoMember($class, $keyAnnotation, $member)
Definition: OrmUtils.php:200
static isNotNullOrNullAccepted($v, $className, $member)
Definition: OrmUtils.php:116
static getFieldType($className, $field)
Definition: OrmUtils.php:92
Utilitaires de mappage Objet/relationnel.
Definition: OrmUtils.php:15
static getFirstKey($class)
Definition: OrmUtils.php:121
static getFirstKeyValue($instance)
Definition: OrmUtils.php:126
static getKeyFieldsAndValues($instance)
Definition: OrmUtils.php:66
static isNullable($class, $member)
Definition: OrmUtils.php:33
static isSerializable($class, $member)
Definition: OrmUtils.php:25
static isAssociative($array)
Definition: UArray.php:7
static exists($instance, $memberKey, $array)
Definition: OrmUtils.php:171
static getMemberValue($instance, $member)
Definition: Reflexion.php:35
static getFieldTypes($className)
Definition: OrmUtils.php:85
static getMembersAndValues($instance, $members=NULL)
Definition: OrmUtils.php:99
static getFieldNames($model)
Definition: OrmUtils.php:50
static getModelMetadata($className)
Definition: OrmUtils.php:18
static getManyToManyFields($class)
Definition: OrmUtils.php:240
static getJoinColumnName($class, $member)
Definition: OrmUtils.php:184
static getTableName($class)
Definition: OrmUtils.php:61
static getFieldName($class, $member)
Definition: OrmUtils.php:41
static getManyToOneFields($class)
Definition: OrmUtils.php:236
static getKeyFields($instance)
Definition: OrmUtils.php:71
static getMembersWithAnnotation($class, $annotation)
Definition: OrmUtils.php:158
static getSerializableFields($class)
Definition: OrmUtils.php:216