Exemplo n.º 1
0
 /**
  *    real implementation of Charcoal_SmartGateway::updateFieldBy()
  *
  * @param Charcoal_String|string $comment                comment text
  * @param Charcoal_QueryTarget $query_target    description about target model, alias, or joins
  * @param Charcoal_String|string $update_field            field name to update
  * @param mixed $update_value                             scalar primitive data to update
  * @param Charcoal_String|string $query_field             field name to query
  * @param mixed $query_value                              field value to query
  *
  * @return integer count of affected rows
  */
 public function updateFieldBy($comment, $query_target, $update_field, $update_value, $query_field, $query_value)
 {
     Charcoal_ParamTrait::validateString(1, $comment, TRUE);
     Charcoal_ParamTrait::validateIsA(2, 'Charcoal_QueryTarget', $query_target);
     Charcoal_ParamTrait::validateString(3, $update_field);
     Charcoal_ParamTrait::validateScalar(4, $update_value);
     Charcoal_ParamTrait::validateString(5, $query_field);
     Charcoal_ParamTrait::validateScalar(6, $query_value);
     $model = $this->getModel($query_target->getModelName());
     $alias = $query_target->getAlias();
     $dto = $model->createDTO();
     $dto->{$update_field} = $update_value instanceof Charcoal_Scalar ? $update_value->unbox() : $update_value;
     //        log_debug( "debug,smart_gateway,sql", "dto:" . print_r($dto,true) );
     //        log_debug( "debug,smart_gateway,sql", "sql:$sql", self::TAG );
     //        log_debug( "debug,smart_gateway,sql", "params:" . print_r($params,true), self::TAG );
     $where = "{$query_field} = ?";
     $params = array($query_value);
     $criteria = new Charcoal_SQLCriteria($where, $params);
     list($sql, $params) = $this->sql_builder->buildUpdateSQL($model, $alias, $dto, $criteria);
     $sql = !empty($comment) ? $this->sql_builder->prependComment($sql, $comment) : $sql;
     //        log_debug( "debug,smart_gateway,sql", "sql:$sql", self::TAG );
     //        log_debug( "debug,smart_gateway,sql", "params:" . print_r($params,true), self::TAG );
     $this->data_source->prepareExecute($sql, $params);
     return $this->data_source->numRows();
 }