Ubiquity  2.0.2
php rapid development framework
DAOUpdatesTrait.php
Go to the documentation of this file.
1 <?php
3 
9 
16 
17 
22  public static function remove($instance) {
23  $tableName=OrmUtils::getTableName(get_class($instance));
24  $keyAndValues=OrmUtils::getKeyFieldsAndValues($instance);
25  return self::removeByKey_($tableName, $keyAndValues);
26  }
27 
33  private static function removeByKey_($tableName,$keyAndValues){
34  $sql="DELETE FROM " . $tableName . " WHERE " . SqlUtils::getWhere($keyAndValues);
35  Logger::log("delete", $sql);
36  $statement=self::$db->prepareStatement($sql);
37  foreach ( $keyAndValues as $key => $value ) {
38  self::$db->bindValueFromStatement($statement, $key, $value);
39  }
40 
41  return $statement->execute();
42  }
43 
49  private static function remove_($tableName,$where){
50  $sql="DELETE FROM " . $tableName . " WHERE " . SqlUtils::checkWhere($where);
51  Logger::log("delete", $sql);
52  $statement=self::$db->prepareStatement($sql);
53  return $statement->execute();
54  }
55 
61  public static function delete($modelName,$ids){
62  $tableName=OrmUtils::getTableName($modelName);
63  $pk=OrmUtils::getFirstKey($modelName);
64  if(!\is_array($ids)){
65  $ids=[$ids];
66  }
67  $where=SqlUtils::getMultiWhere($ids, $pk);
68  return self::remove_($tableName, $where);
69  }
70 
76  public static function insert($instance, $insertMany=false) {
77  $tableName=OrmUtils::getTableName(get_class($instance));
78  $keyAndValues=Reflexion::getPropertiesAndValues($instance);
79  $keyAndValues=array_merge($keyAndValues, OrmUtils::getManyToOneMembersAndValues($instance));
80  $sql="INSERT INTO " . $tableName . "(" . SqlUtils::getInsertFields($keyAndValues) . ") VALUES(" . SqlUtils::getInsertFieldsValues($keyAndValues) . ")";
81  Logger::log("insert", $sql);
82  Logger::log("Key and values", json_encode($keyAndValues));
83  $statement=self::$db->prepareStatement($sql);
84  foreach ( $keyAndValues as $key => $value ) {
85  self::$db->bindValueFromStatement($statement, $key, $value);
86  }
87  $result=$statement->execute();
88  if ($result) {
89  $accesseurId="set" . ucfirst(OrmUtils::getFirstKey(get_class($instance)));
90  $instance->$accesseurId(self::$db->lastInserId());
91  if ($insertMany) {
92  self::insertOrUpdateAllManyToMany($instance);
93  }
94  }
95  return $result;
96  }
97 
102  public static function insertOrUpdateAllManyToMany($instance) {
103  $members=OrmUtils::getAnnotationInfo(get_class($instance), "#manyToMany");
104  if ($members !== false) {
105  $members=\array_keys($members);
106  foreach ( $members as $member ) {
107  self::insertOrUpdateManyToMany($instance, $member);
108  }
109  }
110  }
111 
117  public static function insertOrUpdateManyToMany($instance, $member) {
118  $parser=new ManyToManyParser($instance, $member);
119  if ($parser->init()) {
120  $myField=$parser->getMyFkField();
121  $field=$parser->getFkField();
122  $sql="INSERT INTO `" . $parser->getJoinTable() . "`(`" . $myField . "`,`" . $field . "`) VALUES (:" . $myField . ",:" . $field . ");";
123  $memberAccessor="get" . ucfirst($member);
124  $memberValues=$instance->$memberAccessor();
125  $myKey=$parser->getMyPk();
126  $myAccessorId="get" . ucfirst($myKey);
127  $accessorId="get" . ucfirst($parser->getPk());
128  $id=$instance->$myAccessorId();
129  if (!is_null($memberValues)) {
130  self::$db->execute("DELETE FROM `" . $parser->getJoinTable() . "` WHERE `" . $myField . "`='" . $id . "'");
131  $statement=self::$db->prepareStatement($sql);
132  foreach ( $memberValues as $targetInstance ) {
133  $foreignId=$targetInstance->$accessorId();
134  $foreignInstances=self::getAll($parser->getTargetEntity(), "`" . $parser->getPk() . "`" . "='" . $foreignId . "'");
135  if (!OrmUtils::exists($targetInstance, $parser->getPk(), $foreignInstances)) {
136  self::insert($targetInstance, false);
137  $foreignId=$targetInstance->$accessorId();
138  Logger::log("InsertMany", "Insertion d'une instance de " . get_class($instance));
139  }
140  self::$db->bindValueFromStatement($statement, $myField, $id);
141  self::$db->bindValueFromStatement($statement, $field, $foreignId);
142  $statement->execute();
143  Logger::log("InsertMany", "Insertion des valeurs dans la table association '" . $parser->getJoinTable() . "'");
144  }
145  }
146  }
147  }
148 
155  public static function update($instance, $updateMany=false) {
156  $tableName=OrmUtils::getTableName(get_class($instance));
157  $ColumnskeyAndValues=Reflexion::getPropertiesAndValues($instance);
158  $ColumnskeyAndValues=array_merge($ColumnskeyAndValues, OrmUtils::getManyToOneMembersAndValues($instance));
159  $keyFieldsAndValues=OrmUtils::getKeyFieldsAndValues($instance);
160  $sql="UPDATE " . $tableName . " SET " . SqlUtils::getUpdateFieldsKeyAndValues($ColumnskeyAndValues) . " WHERE " . SqlUtils::getWhere($keyFieldsAndValues);
161  Logger::log("update", $sql);
162  Logger::log("Key and values", json_encode($ColumnskeyAndValues));
163  $statement=self::$db->prepareStatement($sql);
164  foreach ( $ColumnskeyAndValues as $key => $value ) {
165  self::$db->bindValueFromStatement($statement, $key, $value);
166  }
167  $result=$statement->execute();
168  if ($result && $updateMany)
169  self::insertOrUpdateAllManyToMany($instance);
170  return $result;
171  }
172 
178  public static function save($instance, $updateMany=false) {
179  if(isset($instance->_rest)){
180  return self::update($instance,$updateMany);
181  }
182  return self::insert($instance,$updateMany);
183  }
184 }
static getManyToOneMembersAndValues($instance)
Definition: OrmUtils.php:136
static checkWhere($condition)
Definition: SqlUtils.php:65
static getUpdateFieldsKeyAndValues($keyAndValues)
Definition: SqlUtils.php:57
static getAnnotationInfo($class, $keyAnnotation)
Definition: OrmUtils.php:194
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:49
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:121
static getPropertiesAndValues($instance, $props=NULL)
Definition: Reflexion.php:58
static getKeyFieldsAndValues($instance)
Definition: OrmUtils.php:66
static exists($instance, $memberKey, $array)
Definition: OrmUtils.php:171
static log($id, $message, $code=0)
Definition: Logger.php:22
static getTableName($class)
Definition: OrmUtils.php:61
static insertOrUpdateAllManyToMany($instance)
Met à jour les membres de $instance annotés par un ManyToMany.
static remove_($tableName, $where)
static getInsertFieldsValues($keyAndValues)
Definition: SqlUtils.php:53
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.