1

SQL を参照して Magento モデルを理解する:

  1. select * from user_devices where user_id = 1
  2. select * from user_devices where device_id = 3

Magento モデルを使用して同じことを実行するにはどうすればよいですか?getModel("module/userdevice")

また、各クエリの行数を見つけるにはどうすればよいですか

以下の質問は、このスレッドで回答済みです。

How to perform a where clause ?
How to retrieve the size of the result set ?
How to retrieve the first item in the result set ?
How to paginate the result set ? (limit)
How to name the model ?
4

1 に答える 1

3

コレクションについて言及しています

あなたのためのいくつかの参照:

  1. http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-5-magento-models-and-orm-b​​asics
  2. http://alanstorm.com/magento_collections
  3. http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/using_collections_in_magento
  4. lib/varien/data/collection/db.php および lib/varien/data/collection.php

したがって、モジュールが正しく設定されていると仮定すると、コレクションを使用してモデル タイプの複数のオブジェクトを取得します。

この構文は次のとおりです。

$yourCollection = Mage::getModel('module/userdevice')->getCollection()

Magento は、開発者がコレクションで使用できるいくつかの優れた機能を提供しています。したがって、上記の例は非常に簡単に実現できます。

$yourCollection = Mage::getModel('module/userdevice')->getCollection()
    ->addFieldToFilter('user_id', 1)
    ->addFieldToFilter('device_id', 3);

返されたオブジェクトの数を取得できます。

$yourCollection->count() または単純に count($yourCollection)

編集

コメントで提起された質問に答えるには:「コレクションではなく、特定のオブジェクトだけが必要な場合

これは、元の質問の両方の条件を満たす必要があるかどうか、またはロードするオブジェクトの ID を知っているかどうかによって異なります。

オブジェクトのIDがわかっている場合は、次のようにします。

Mage::getModel('module/userdevice')->load($objectId);

ただし、2 つの属性に基づいてロードしたい場合は、次のようにします。

user_id = 1
device_id = 3

その場合でもコレクションを使用しますが、単純に最初のオブジェクトを返します (1 つのオブジェクトのみが両方の条件を満たすことができると仮定します)。

再利用するには、このロジックをメソッドにラップして、モデルに配置します。

public function loadByUserDevice($userId, $deviceId)
{
    $collection = $this->getResourceCollection()
        ->addFieldToFilter('user_id', $userId)
        ->addFieldToFilter('device_id', $deviceId)
        ->setCurPage(1)
        ->setPageSize(1)
    ;

    foreach ($collection as $obj) {
        return $obj;
    }
    return false;
}

これを次のように呼び出します。

$userId = 1;
$deviceId = 3;
Mage::getModel('module/userdevice')->loadByUserDevice($userId, $deviceId);

ノート:

loadByUserDevice を次のように短縮できますが、オブジェクトが見つからない場合、false の戻り値の利点は得られません。

public function loadByUserDevice($userId, $deviceId)
{
    $collection = $this->getResourceCollection()
        ->addFieldToFilter('user_id', $userId)
        ->addFieldToFilter('device_id', $deviceId)
    ;

    return $collection->getFirstItem();
}
于 2012-06-23T12:00:27.460 に答える