Pregunta
¿Por qué no puedo hacer lo siguiente?
$this->getSelect()
->columns(
array(
'ordered_qty' => 'COUNT(DISTINCT main_table.entity_id)',
'invoiced_qty' => new Zend_Db_Expr('( select COUNT(OI.item_id) AS Ct from sales_flat_order_item AS OI WHERE OI.order_id=main_table.entity_id ) AS invoiced_qty')
)
);
La subconsulta falla con el error, "no puede determinar el nombre del campo"
Solución
Su pregunta no tiene suficiente contexto para proporcionar una respuesta concreta, por lo que voy a explicar por qué Magento está lanzando una excepción con el mensaje.
No se puede determinar el nombre del campo
Esperemos que eso le brinde suficiente información para rastrear el problema.
En un sistema de Magento de stock, el solamente colocar el error "no se puede determinar el nombre del campo" Aparece es
#File: app/code/core/Mage/Sales/Model/Resource/Collection/Abstract.php
protected function _attributeToField($attribute)
{
$field = false;
if (is_string($attribute)) {
$field = $attribute;
} elseif ($attribute instanceof Mage_Eav_Model_Entity_Attribute) {
$field = $attribute->getAttributeCode();
}
if (!$field) {
Mage::throwException(Mage::helper('sales')->__('Cannot determine the field name.'));
}
return $field;
}
Entonces, si el _attributeToField
se pasa el método un valor de atributo que es
Una cadena vacía
Un objeto de atributo donde
getAttributeCode
Devuelve falso (o uno de los muchos valores Php considera falso-ish)Algo que no es un
Mage_Eav_Model_Entity_Attribute
o cadena
entonces se lanza la excepción "no se puede determinar el nombre del campo".
En un sistema estándar, magento llama a este método cuando llama a un objeto de recolección addAttributeToSelect
, addAttributeToFilter
, addAttributeToSort
, o addAttributeToSearchFilter
métodos.
Entonces, algo sobre su código hace que se pase un valor no válido a _attributeToField
. Esto significa que el problema no es su subcuadery, o el subcreidor puede alterar algo que hace que se pase un valor no válido.