Domanda

Perché cant fare quanto segue:

            $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 sottoquery fallisce con l'errore, "Impossibile determinare il nome del campo"

È stato utile?

Soluzione

La tua domanda non ha abbastanza contesto per fornire una risposta concreta, così ho intenzione di spiegare perché Magento è un'eccezione con il messaggio

Impossibile determinare il nome del campo

Si spera che vi darà informazioni sufficienti per rintracciare il problema.

In un magazzino sistema di Magento, il solo posizionare l'errore "Impossibile determinare il nome del campo" appare è

#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;
}

Quindi, se il metodo _attributeToField viene passato un valore di attributo di

  1. Una stringa vuota

  2. Un oggetto attributo dove getAttributeCode riporta false (o uno dei tanti valori PHP ritiene falso-ish)

  3. Una cosa che non è un Mage_Eav_Model_Entity_Attribute o una stringa

quindi l'eccezione "Impossibile determinare il nome del campo" è gettato.

In un sistema standard di Magento chiama questo metodo quando si chiama metodi addAttributeToSelect, addAttributeToFilter, addAttributeToSort o addAttributeToSearchFilter di un oggetto di raccolta.

Quindi, qualcosa circa il tuo codice determina un valore non valido da passare al _attributeToField. Ciò significa che il problema non è il sub-query, o il sub-query può alterare qualcosa che provoca un valore non valido per essere passato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top