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 »

Était-ce utile?

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

  1. une chaîne vide

  2. Un objet d'attribut où les retours de getAttributeCode faux (ou l'une des nombreuses valeurs PHP considère faux-ish)

  3. 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top