سؤال

آسف على السؤال، لكني بحثت في جوجل ولم أجد الإجابة.

في app/core/Mage/Sales/Model/Convert/Order.php وفي السطر 513 توجد هذه القاعدة:

$this->_order = Mage::getModel('sales/order')->load($this->getOnepage()->getQuote()->getId(), 'quote_id');

ولكن أين هي المعلمة الثانية في وظيفة التحميل؟كما أعلم، تحصل إحدى المعلمات على معرف الحقل الأساسي، أليس كذلك؟هل هذه المعلمة الثانية quote_id ليس المفتاح الأساسي، ولكنه سيتم تحميل السجل به $this->getOnepage()->getQuote()->getId()?

شكرا لك مقدما.

هل كانت مفيدة؟

المحلول

الإجابة المختصرة هي أن المعلمة الثانية تتوقع اسم الحقل الذي تريد تحميل المنتج به.يتيح لك هذا تحميله بشيء آخر غير المعرف فقط، ولكنه يتم تعيينه افتراضيًا على المعرف إذا لم يتم توفير أي شيء.مزيد من المعلومات أدناه إذا كنت تريد التفاصيل:

إذا نظرت إلى وحدة "المبيعات/الطلب" في app/code/core/Mage/Sales/Model/Order.php ستجد أنه لا يوجد بها دالة تحميل معلنة، لذلك ننتقل إلى سلسلة توريثها Mage_Sales_Model_Abstract كما أنها لا تحتوي على وظيفة تحميل.يصل إلى مستوى آخر من الميراث ل Mage_Core_Model_Abstract تظهر لنا هذه الوظيفة:

public function load($id, $field=null)
{
    $this->_beforeLoad($id, $field);
    $this->_getResource()->load($this, $id, $field);
    $this->_afterLoad();
    $this->setOrigData();
    $this->_hasDataChanges = false;
    return $this;
}

إذا نظرت إلى السطر الذي يحتوي على _getResource، سترى أنه تم تمرير هذه المعلمة الثانية إلى المورد للمساعدة في تحميله.

إذا قمت بتحميل المورد لـ "المبيعات/الطلب" في app/code/core/Mage/Sales/Resource/Order.php فلن تجد وظيفة تحميل، لذلك يجب عليك الانتقال بضع خطوات إلى أعلى الميراث Mage_Core_Model_Resource_Db_Abstract للعثور على وظيفة التحميل:

public function load(Mage_Core_Model_Abstract $object, $value, $field = null)
{
    if (is_null($field)) {
        $field = $this->getIdFieldName();
    }

    $read = $this->_getReadAdapter();
    if ($read && !is_null($value)) {
        $select = $this->_getLoadSelect($field, $value, $object);
        $data = $read->fetchRow($select);

        if ($data) {
            $object->setData($data);
        }
    }

    $this->unserializeFields($object);
    $this->_afterLoad($object);

    return $this;
}

يمكنك أن ترى في هذه الوظيفة أنه إذا لم يتم تعيين الحقل، فسيتم تعيينه افتراضيًا على حقل المعرف باستخدام $this->getIdFieldName().

$this->getLoadSelect يستخدم الحقل لتحميل الكائن الذي تريده بناءً على هذا الحقل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top