Mage :: GetModelの2番目のパラメータは何ですか
-
13-12-2019 - |
質問
尋ねて申し訳ありませんが、Googleを検索しましたが、答えが見つかりません。
線513上のapp/core/Mage/Sales/Model/Convert/Order.php
この規則があります:
$this->_order = Mage::getModel('sales/order')->load($this->getOnepage()->getQuote()->getId(), 'quote_id');
.
しかし、ロード関数の2番目のパラメータはどこにありますか?私が知っているように、1つのパラメータはプライマリフィールドのIDを正しく取得しますか?この2番目のパラメータquote_id
は主キーではありませんが、$this->getOnepage()->getQuote()->getId()
を使用してレコードをロードしますか?
事前にありがとうございました。
解決
短い回答は、2番目のパラメータが製品をロードするフィールド名を予想することです。これにより、IDだけでは、何も提供されていなければ、デフォルトではデフォルトで読み込むことができます。詳細が必要な場合は、以下の詳細情報が必要です。
app/code/core/Mage/Sales/Model/Order.php
のモジュール「販売/順」を調べると、ロード機能が宣言されていないことがわかりますので、Mage_Sales_Model_Abstract
への継承のチェーンを上り、ロード機能もありません。 。 Mage_Core_Model_Abstract
へのもう1つの継承レベルを表示するこの関数を表示します。
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を含む行を見ると、この2番目のパラメータがロードするのを助けるためにリソースに渡されることがわかります。
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()を使用してデフォルトでIDフィールドにデフォルト設定できます。
$ this-> getLoadSelectフィールドを使用して、そのフィールドに基づいて希望するオブジェクトをロードします。