タグ付けされた質問 「model」

モデルには、Magentoモジュールのビジネスロジックのほとんどが含まれています

1
Magentoのファクトリーメソッドの完全なクラス名
Magento 1では、ファクトリメソッドで完全なMagentoクラス名を使用すると、オブジェクトをインスタンス化できます //trying full class name instead of catalog/product $object = Mage::getModel('Mage_Catalog_Model_Product'); ただし、同じことはヘルパーには機能しません。あなたがしようとすると Mage::helper('Mage_Core_Helper_Url'); あなたが得る Warning: include(Mage/Mage/Core/Helper/Url/Helper/Data.php): failed to open stream: No such file or directory in /path/to/magentolib/Varien/Autoload.php on line 93 #0 /path/to/magentolib/Varien/Autoload.php(93): mageCoreErrorHandler(2, 'include(Mage/Ma...', '/path/to/magent...', 93, Array) #1 /path/to/magentolib/Varien/Autoload.php(93): Varien_Autoload::autoload() #2 [internal function]: Varien_Autoload->autoload('Mage_Mage_Core_...') #3 /path/to/magentoapp/Mage.php(547): spl_autoload_call('Mage_Mage_Core_...') #4 /path/to/magentoapp/code/local/Sebastianjuffar/Commercebug/controllers/IndexController.php(11): …
11 model  helper  factory 


6
Magento 2で国コードから国名を取得する方法
国コードから国名を取得したいのですが、次のようなデータオーダーから国コードを取得しました。 $data = $order->getShippingAddress()->getData(); $countryCode = $data['country_id']; echo $countryCode; 「US」またはその他の国コードを出力しますが、この国コードから国名を取得する方法はありますか?


2
モデルの新しいエンティティまたは更新されたエンティティを保存するにはどうすればよいですか?
Magento 2にはリポジトリクラスがあります。save()Magento 1.9で頻繁に使用されていたクラシックな方法は、私が正しければ2.04または2.05から廃止されます。私はファクトリを使用して新しいオブジェクトを作成し、新しいプロパティを設定した後、たとえば、私が呼び出した製品save(): $productFactory->create()->setName()...->save() 一方、methodを含むリポジトリもありますsave。私はこのように一言でそれを使用しています: $product = $productFactory->create()->setName()... $productRepository->save($product) 私のコードでは、両方の方法で機能するクラスがあります。また、時には異なる方法が異なる動作を意味することにも気づきました。リポジトリを使用した方法で、データの追加の検証が提供されていますか? 私はそれをどのようにすべきですか?

2
モデルをロードする適切な方法は何で、なぜですか
私はMagentoでかなりの経験を持っていますが、モデルをロードする方法が正しい方法とその理由を理解していないことに気付きました。私はトピックについてできる限りのことを読みましたが、このようなことを説明している人々は実際には説明するのに十分な深さでは決してありません。ロードしたいモデルのリポジトリがないとしましょう。 これまでは、コンストラクターで常にモデルを使用していて、単純にそれをロードしていました。 public function __construct( \Vendor\Module\Model\Something $somethingModel ) { $this->somethingModel = $somethingModel; } public function getTestById($id) { return $this->somethingModel->load($id); } そして、それは常に意図したとおりに機能しました。また、コアで一般的に使用されているか、少なくとも使用されていたと確信しています。 しかし、私は同僚の一人が modelFactory->create()->load($id) 工場が新しいエンティティの作成に使用されていることを理解している限り、たとえば、新しい製品を作成したい場合は、ファクトリを作成し、データを入力して保存できます。しかし、再び、トピックの調査を開始し、この方法でモデルをロードしていたファビアンシュメングラー(Magento 2でリポジトリとファクトリを使用する必要がある場合)の例を見ました。 tそれが「サービス契約の一部ではない」と言うことのほかに理由を説明してください。リポジトリがサービスコントラクトの一部であることを理解している限り、リポジトリからは利用できないモデルの読み込みに関しては、ここでは何の関係もありません。 さらに混乱を加えるために、作成されたmodelFactoryからresourceModelを取得してモデルをロードする方法も見つけました。VinaiKoppによって提示されました(Magento 2でカスタムモジュールのサービスコントラクトを実装する方法は?)。リソースモデルを直接使用するべきではないことをいつも読んだので、完全に失われました。 だから、ええ、誰かが正しい方法を教えてもらえますか?なぜ私が他のすべての方法の代わりにそれを使うべきなのでしょうか?

1
自動インクリメント以外の主キーを持つテーブル
Magentoで、idとdateの2つのフィールドを持つテーブルをセットアップしました。日付は単に現在に設定されていますが、IDは実際には注文IDに添付された外部キーです。 私の問題は、Magentoがこれらのオブジェクトを保存しないことです。エラーは発生しませんが、データベースには何も追加されません。
9 database  model  table 

2
2つのテーブルを結合するモデルデータをロードする方法
テーブルAをターゲットとする単純なモデルAがあるとします。ここで、追加情報を追加する必要があるため、モデルBを作成し、テーブルAのインデックスキーを指す外部キーを使用してそれらの追加情報をテーブルBに保存します。 通常、結合はコレクションで行われますが、モデルをロードした場合、コレクションは呼び出されず、代わりにのみresource modelが使用されます。 モデルAを変更して、表Bのデータもロードする方法を教えてload()ください。
9 model  sql 

2
`number = number-1`のように設定するのではなく、値を減らします。Magentoで可能ですか?
アトミックデータベース操作で値をデクリメントする必要があります。Magentoモデルを使用して可能ですか? setNumber($number)のようnumber = $numberに動作しますが、SQLクエリでデクリメントする必要があります。 Magentoで可能ですか、それともSQLクエリを自分で作成する必要がありますか?

3
Mage :: getModel( 'catalog / product')-> load($ sku、 'sku');のエラー
商品を読み込もうとすると、 $foundProduct = Mage::getModel('catalog/product')->load($sku, 'sku'); 次のエラーが発生します。 Fatal error: Uncaught exception 'Exception' with message 'Warning: Invalid argument supplied for foreach() in app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 954' in app/code/core/Mage/Core/functions.php:245 Stack trace: #0 app/code/core/Mage/Eav/Model/Entity/Abstract.php(954): mageCoreErrorHandler(2, 'Invalid argumen...', '/var/www/magent...', 954, Array) #1 app/code/core/Mage/Catalog/Model/Resource/Abstract.php(698): Mage_Eav_Model_Entity_Abstract->load(Object(Mage_Catalog_Model_Product), '120x180 ES-bale...', 'sku') #2 app/code/core/Mage/Core/Model/Abstract.php(225): Mage_Catalog_Model_Resource_Abstract->load(Object(Mage_Catalog_Model_Product), '120x180 ES-bale...', 'sku') #3 updatemagento.php(197): …

4
_save_beforeイベントを使用してモデルデータを保存しないようにする方法
独自のデータベーステーブルを持つモデルを作成しました。カスタマイズするにsave_beforeは、このモデルのイベントをトリガーする必要があります。 1つのフィールド値が一致しない場合、データは保存されません。 私の主な目標は、「保存前」イベントを使用したデータの保存を防ぐことです 私のconfig.xmlコード: <?xml version="1.0" ?> <config> <modules> <Amit_Custommodule> <version>1.0.0</version> </Amit_Custommodule> </modules> <global> <models> <custommodule> <class>Amit_Custommodule_Model</class> <resourceModel>custommodule_resource</resourceModel> </custommodule> <custommodule_resource> <class>Amit_Custommodule_Model_Resource</class> <entities> <custommodule> <table>custommodule</table> </custommodule> </entities> </custommodule_resource> </models> <resources> <custommodule_setup> <setup> <module>Amit_Custommodule</module> </setup> <connection> <use>core_setup</use> </connection> </custommodule_setup> <custommoule_read> <connection> <use>core_read</use> </connection> </custommoule_read> <custommodule_write> <connection> <use>core_write</use> </connection> </custommodule_write> </resources> <events> <custommodule_save_before> …

2
カスタムグリッドフィルターを作成する方法
カスタムデータベースのフィールドURLを使用してカスタムグリッド列を追加しました。 $this->addColumn('url', array( 'header' => Mage::helper('companymodule')->__('Has Website'), 'align' => 'left', 'index' => 'url', 'renderer' => new Company_Module_Block_Adminhtml_Module_Grid_Renderer_HasUrl(), 'type' => 'options', 'options' => Mage::getSingleton('companymodule/hasurl')->getOptionArray(), )); そして、このカスタムレンダリングを作成しました: class Company_Module_Block_Adminhtml_Module_Grid_Renderer_HasUrl extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract { public function render(Varien_Object $row) { $value = trim((string)$row->getData($this->getColumn()->getIndex())); if (empty($value)) { return 'No'; } else { return 'Yes'; } } …
8 adminhtml  grid  model 


1
cms / blockエンティティの場合、下位データがcms_page_storeから明示的に削除されるのはなぜですか?
cms/blockエンティティには結合テーブルcms_block_storeがあります。これは、特定のブロックを1つ以上のストアにリンクするレコードです。CE 1.6 より前は、エンティティが削除される前にリソースモデルMage_Cms_Model_Mysql4_Block(リンク)がこれらのレコードを個別に削除することはなく、カスケードを使用してレコードを効果的に削除していました。1.6.0.0以降、再配置されたリソースモデルは、エンティティがから削除される前にMage_Cms_Model_Resource_Block::_beforeDelete(リンク) 内のこれらのレコードを明示的に削除します。cms_block protected function _beforeDelete(Mage_Core_Model_Abstract $object) { $condition = array( 'block_id = ?' => (int) $object->getId(), ); $this->_getWriteAdapter()->delete($this->getTable('cms/block_store'), $condition); return parent::_beforeDelete($object); } 以前のようにカスケードに依存するのではなく、2つの別々のクエリでこの操作を実行する明らかな理由はありますか?
8 database  cms  model  mysql 

3
テーブルに追加された新しい列は保存されません
newsletter_subscriberテーブルに「artists_followed」という新しい列を追加しました。オーバーライドしたMage_Newsletter_Model_Subscriberモデルクラスに、次の関数を追加しました。 public function updateSubscriberArtists($email, $artist) { $this->loadByEmail($email); if ($this->getId()) { $this->setArtistsFollowed($artist); try { $this->save(); } catch (Exception $e) { throw new Exception($e->getMessage()); } } } すべて正常に実行され、エラーはスローされませんが、データベースを見ると、新しい列にデータが入力されていません。 私のテーブルは: CREATE TABLE `mage_newsletter_subscriber` ( `subscriber_id` int(7) unsigned NOT NULL AUTO_INCREMENT, `store_id` smallint(5) unsigned DEFAULT '0', `change_status_at` datetime DEFAULT NULL, `customer_id` int(11) unsigned NOT …
8 model 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.