Ubiquity  2.0.3
php rapid development framework
DAOUpdatesTrait.php
Go to the documentation of this file.
1 <?php
2 
4 
10 
18 
25  public static function remove($instance) {
26  $tableName = OrmUtils::getTableName ( get_class ( $instance ) );
27  $keyAndValues = OrmUtils::getKeyFieldsAndValues ( $instance );
28  return self::removeByKey_ ( $tableName, $keyAndValues );
29  }
30 
37  private static function removeByKey_($tableName, $keyAndValues) {
38  $sql = "DELETE FROM " . $tableName . " WHERE " . SqlUtils::getWhere ( $keyAndValues );
39  Logger::log ( "delete", $sql );
40  $statement = self::$db->prepareStatement ( $sql );
41  foreach ( $keyAndValues as $key => $value ) {
42  self::$db->bindValueFromStatement ( $statement, $key, $value );
43  }
44 
45  return $statement->execute ();
46  }
47 
54  private static function remove_($tableName, $where) {
55  $sql = "DELETE FROM " . $tableName . " WHERE " . SqlUtils::checkWhere ( $where );
56  Logger::log ( "delete", $sql );
57  $statement = self::$db->prepareStatement ( $sql );
58  return $statement->execute ();
59  }
60 
67  public static function delete($modelName, $ids) {
68  $tableName = OrmUtils::getTableName ( $modelName );
69  $pk = OrmUtils::getFirstKey ( $modelName );
70  if (! \is_array ( $ids )) {
71  $ids = [ $ids ];
72  }
73  $where = SqlUtils::getMultiWhere ( $ids, $pk );
74  return self::remove_ ( $tableName, $where );
75  }
76 
85  public static function insert($instance, $insertMany = false) {
86  $tableName = OrmUtils::getTableName ( get_class ( $instance ) );
87  $keyAndValues = Reflexion::getPropertiesAndValues ( $instance );
88  $keyAndValues = array_merge ( $keyAndValues, OrmUtils::getManyToOneMembersAndValues ( $instance ) );
89  $sql = "INSERT INTO " . $tableName . "(" . SqlUtils::getInsertFields ( $keyAndValues ) . ") VALUES(" . SqlUtils::getInsertFieldsValues ( $keyAndValues ) . ")";
90  Logger::log ( "insert", $sql );
91  Logger::log ( "Key and values", json_encode ( $keyAndValues ) );
92  $statement = self::$db->prepareStatement ( $sql );
93  foreach ( $keyAndValues as $key => $value ) {
94  self::$db->bindValueFromStatement ( $statement, $key, $value );
95  }
96  $result = $statement->execute ();
97  if ($result) {
98  $accesseurId = "set" . ucfirst ( OrmUtils::getFirstKey ( get_class ( $instance ) ) );
99  $instance->$accesseurId ( self::$db->lastInserId () );
100  if ($insertMany) {
101  self::insertOrUpdateAllManyToMany ( $instance );
102  }
103  }
104  return $result;
105  }
106 
112  public static function insertOrUpdateAllManyToMany($instance) {
113  $members = OrmUtils::getAnnotationInfo ( get_class ( $instance ), "#manyToMany" );
114  if ($members !== false) {
115  $members = \array_keys ( $members );
116  foreach ( $members as $member ) {
117  self::insertOrUpdateManyToMany ( $instance, $member );
118  }
119  }
120  }
121 
128  public static function insertOrUpdateManyToMany($instance, $member) {
129  $parser = new ManyToManyParser ( $instance, $member );
130  if ($parser->init ()) {
131  $myField = $parser->getMyFkField ();
132  $field = $parser->getFkField ();
133  $sql = "INSERT INTO `" . $parser->getJoinTable () . "`(`" . $myField . "`,`" . $field . "`) VALUES (:" . $myField . ",:" . $field . ");";
134  $memberAccessor = "get" . ucfirst ( $member );
135  $memberValues = $instance->$memberAccessor ();
136  $myKey = $parser->getMyPk ();
137  $myAccessorId = "get" . ucfirst ( $myKey );
138  $accessorId = "get" . ucfirst ( $parser->getPk () );
139  $id = $instance->$myAccessorId ();
140  if (! is_null ( $memberValues )) {
141  self::$db->execute ( "DELETE FROM `" . $parser->getJoinTable () . "` WHERE `" . $myField . "`='" . $id . "'" );
142  $statement = self::$db->prepareStatement ( $sql );
143  foreach ( $memberValues as $targetInstance ) {
144  $foreignId = $targetInstance->$accessorId ();
145  $foreignInstances = self::getAll ( $parser->getTargetEntity (), "`" . $parser->getPk () . "`" . "='" . $foreignId . "'" );
146  if (! OrmUtils::exists ( $targetInstance, $parser->getPk (), $foreignInstances )) {
147  self::insert ( $targetInstance, false );
148  $foreignId = $targetInstance->$accessorId ();
149  Logger::log ( "InsertMany", "Insertion d'une instance de " . get_class ( $instance ) );
150  }
151  self::$db->bindValueFromStatement ( $statement, $myField, $id );
152  self::$db->bindValueFromStatement ( $statement, $field, $foreignId );
153  $statement->execute ();
154  Logger::log ( "InsertMany", "Insertion des valeurs dans la table association '" . $parser->getJoinTable () . "'" );
155  }
156  }
157  }
158  }
159 
169  public static function update($instance, $updateMany = false) {
170  $tableName = OrmUtils::getTableName ( get_class ( $instance ) );
171  $ColumnskeyAndValues = Reflexion::getPropertiesAndValues ( $instance );
172  $ColumnskeyAndValues = array_merge ( $ColumnskeyAndValues, OrmUtils::getManyToOneMembersAndValues ( $instance ) );
173  $keyFieldsAndValues = OrmUtils::getKeyFieldsAndValues ( $instance );
174  $sql = "UPDATE " . $tableName . " SET " . SqlUtils::getUpdateFieldsKeyAndValues ( $ColumnskeyAndValues ) . " WHERE " . SqlUtils::getWhere ( $keyFieldsAndValues );
175  Logger::log ( "update", $sql );
176  Logger::log ( "Key and values", json_encode ( $ColumnskeyAndValues ) );
177  $statement = self::$db->prepareStatement ( $sql );
178  foreach ( $ColumnskeyAndValues as $key => $value ) {
179  self::$db->bindValueFromStatement ( $statement, $key, $value );
180  }
181  $result = $statement->execute ();
182  if ($result && $updateMany)
183  self::insertOrUpdateAllManyToMany ( $instance );
184  return $result;
185  }
186 
193  public static function save($instance, $updateMany = false) {
194  if (isset ( $instance->_rest )) {
195  return self::update ( $instance, $updateMany );
196  }
197  return self::insert ( $instance, $updateMany );
198  }
199 }
static getManyToOneMembersAndValues($instance)
Definition: OrmUtils.php:137
static checkWhere($condition)
Definition: SqlUtils.php:73
static getUpdateFieldsKeyAndValues($keyAndValues)
Definition: SqlUtils.php:65
static getAnnotationInfo($class, $keyAnnotation)
Definition: OrmUtils.php:195
Trait for DAO Updates (Create, Update, Delete)
static getWhere($keyAndValues)
Definition: SqlUtils.php:33
static getMultiWhere($values, $field)
Definition: SqlUtils.php:41
static getInsertFields($keyAndValues)
Definition: SqlUtils.php:57
static removeByKey_($tableName, $keyAndValues)
static save($instance, $updateMany=false)
static insertOrUpdateManyToMany($instance, $member)
Updates the $member member of $instance annotated by a ManyToMany.
static getFirstKey($class)
Definition: OrmUtils.php:122
static getPropertiesAndValues($instance, $props=NULL)
Definition: Reflexion.php:58
static getKeyFieldsAndValues($instance)
Definition: OrmUtils.php:67
static exists($instance, $memberKey, $array)
Definition: OrmUtils.php:172
static log($id, $message, $code=0)
Definition: Logger.php:22
static getTableName($class)
Definition: OrmUtils.php:62
static insertOrUpdateAllManyToMany($instance)
Met à jour les membres de $instance annotés par un ManyToMany.
static remove_($tableName, $where)
static getInsertFieldsValues($keyAndValues)
Definition: SqlUtils.php:61
static update($instance, $updateMany=false)
Updates an existing $instance in the database.
static insert($instance, $insertMany=false)
Inserts a new instance $ instance into the database.