Question
Pourquoi je ne peux pas faire ce qui suit:
$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 sous-requête échoue avec l'erreur « Impossible de déterminer le nom du champ »
La solution
Votre question n'a pas assez contexte pour fournir une réponse concrète, donc je vais vous expliquer pourquoi Magento est de lancer une exception avec le message
Impossible de déterminer le nom du champ
Il faut espérer que vous donner assez d'informations pour suivre le problème.
Dans un stock système Magento, uniquement placer l'erreur "Impossible de déterminer le nom du champ" apparaît est
#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;
}
Ainsi, si la méthode de _attributeToField
est passé d'une valeur d'attribut de
-
une chaîne vide
-
Un objet d'attribut où les retours de
getAttributeCode
faux (ou l'une des nombreuses valeurs PHP considère faux-ish) -
Quelque chose qui est pas un
Mage_Eav_Model_Entity_Attribute
ou une chaîne
alors l'exception « Impossible de déterminer le nom du champ » est jeté.
Dans un système standard Magento appelle cette méthode lorsque vous appelez un addAttributeToSelect
d'objet de collection, addAttributeToFilter
, addAttributeToSort
ou méthodes de addAttributeToSearchFilter
.
Alors, quelque chose sur votre code provoque une valeur non valide à transmettre à _attributeToField
. Cela signifie que le problème n'est pas votre sous-requête ou la sous-requête peut modifier quelque chose qui provoque une valeur non valide à passer.