CMS magentoのORM

この投稿を読んだ後habrahabr.ru/post/303028/#first_unread 。 なぜ多くの開発者が急いで使用するのか疑問に思いました。 そして、なぜ人々は、この機能を長年開発し、サポートしてきた人々よりも賢いという意見を持っています。 そして、あなたはそれを推測しました、ORMについて話しましょう!



実際、magentoはMVCパターンに基づいて構築されており、これは誰にも秘密ではありません。 モデルはエンティティマネージャのプライベート実装であるため、モデルを検討してください。 テーブル「mymodule_mytable」があり、対応するモデルが「mymodule / mytable」であるとします。

モデルを取得します。



$myModule = Mage::getModel('mymodule/mytable')
      
      







モデルを初期化するとき。 Magentoは、セッターとゲッターを自動的に作成します。または、マジックメソッド `__set()`と `__get()`を使用して実装されます。 たとえば、エンティティ(データベース内のテーブル)には、フィールド `id、first_name、last_name`があります



次に、テーブルの毎日の操作を検討します。

1. mysqlで文字列「挿入」を作成します。マゼンタのオブジェクト方言では、次のようになります。

 try { $myModule ->setFirstName('myFirstName') ->setLastName('myLastName') ->save(); } catch(Exception $error) { // error loging }
      
      





2.データベースから行を取得し、 `id`でフィールドを取得します:

  $myModule->load($id);
      
      





3.行の変更

 try { $myModule ->load($id) ->setFirstName('MyFirst') ->save(); } catch(Exception $error) { //loging error }
      
      







4.トランザクション

  // ... $adapter = $this->_getWriteAdapter(); // ... $adapter->beginTransaction() try { $myModel->setFirstName('MyFirstName')->save(); $adapter->commit(); } catch(Exception $error) { $adapter->rollback(); }
      
      







これらはモデルの基本的なプロパティです、あなたが尋ねると思いますが、ORMを使用して特定の量のデータを取得する方法は? 実際、magentoにはコレクションの実装があります。 コレクションをロードするための個別のファイルが作成されます。 ここで少し余談をしなければなりません。もしあなたのモデルがデータベースで動作するなら、それは間違いなくリソースとコレクションの実装を持つでしょう。 私はこれが最初に書かれるべきだったことを理解しています。 しかし、私はそれをしませんでした。 ORMについて話しているので。



テーブルのORMでの操作を引き続き検討します。



5.テーブルのすべてのフィールドの選択:

  $myCollection = $myModel->getCollection()->load();
      
      







6.フィルタリングフィールド

  $myCollection = $myModel->getCollection(); $myCollection->addFieldToFilter('first_name',array( 'eq' => 'MyFirstName' )); $myEntityes = $myCollection->load();
      
      





利用可能なすべてのメソッドを検討するわけではありません。これらはmysqlの「like、in、notlike、regexp、notin」などに似ています。 これらはすべてドキュメントに記載されています。



7.特定のフィールドの選択

  $myCollection->addFieldToSelect( array('id','first_name'); )
      
      







そして、どこに参加しますか? ほとんどの場合、EAVモデル、Entity-attribute-valueを作成する必要があるため、結合はより複雑です。 ほとんどのタスクでは、エッセンスのいくつかの属性が保存されるEAVモデルを作成する必要があります。 開発中のある時点で `id | first_name | last_name`があり、いくつかの改善の後、` id | first_name | last_name | data1 | data2 ... data322`になり、開発者が突然決定するため、追加フィールドの変更と記録のためにjoinitになる別のテーブルを作成します。 最後に、テーブルを変更せずに、「結合」とクエリを修正せずに基本的な問題を解決することはできないという事実に到達します...

ras EAVがこの問題をどのように解決するか、属性を簡単に追加して操作し、ユーザーが新しい属性を追加できるようにし、どこかで落ちたり、変更したりすることを恐れないでください...

そして、これで終わります。記事が興味深い場合は、eavモデルの作成とそのようなモデルの使用に関する続編を書きます...

PS誰かがそれがマイナスである理由を退会するなら...



All Articles