/** * 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(); }