protected function break_relation($object) { if (isset($this->options['through'])) { $rel_table = $this->options['through']; $local_field = $this->get_local_field(); $foreign_field = $this->get_foreign_field($this->foreign_model); $local_id = $this->local_model->primary_key_value(); $foreign_id = $object->primary_key_value(); //TODO: fix it to a more generic way if (isset($this->options['module'])) { $module = $this->options['module']; DbCommand::execute("DELETE FROM `{$rel_table}` WHERE `{$local_field}` = '{$local_id}' and `{$foreign_field}` = '{$foreign_id}' and `module` = '{$module}'"); } else { DbCommand::execute("DELETE FROM `{$rel_table}` WHERE `{$local_field}` = '{$local_id}' and `{$foreign_field}` = '{$foreign_id}'"); } } else { $local_field = $this->get_foreign_field($this->local_model); $object->{$local_field} = null; $object->save(); } }
private function update() { $this->write_magic_time('updated_at'); $pk = $this->primary_key(); $pk_value = $this->sanitize($this->{$pk}); $table = $this->table(); $fields = $this->map_real_fields(); $sql_set = array(); foreach ($fields as $key => $value) { $sql_set[] = "`{$key}` = " . $this->prepare_for_value($value); } $sql_set = implode(",", $sql_set); $sql = "UPDATE `{$table}` SET {$sql_set} WHERE `{$pk}` = '{$pk_value}';"; DbCommand::execute($sql); }