コレクションを使用してmagentoテーブルを切り捨てる方法は?


23

カスタムテーブルがあります。私がしたいMagentoのコレクションを使用してテーブルを切り捨て SQLクエリなし。

誰かが役に立つ情報を提供してくれることを願っています。


何らかの条件に基づいていくつかの行を削除したいということですか?
スベシュポクレル14

いいえ、すべてのレコードを削除する必要があります。また、1から始まる自動インクリメントIDも必要です。
VijayS9114

回答:


18

Magentoはこれをサポートしていません(私の知る限り)。
ただし、テーブルを切り捨てるメソッド(コレクションリソースモデルではなく)をリソースモデルに実装できます。
このようなもの:

public function truncate() {
    $this->_getWriteAdapter()->query('TRUNCATE TABLE '.$this->getMainTable());
    return $this;
}

次に、コードで呼び出すことができます。

Mage::getResourceModel('[module]/[entity]')->truncate();

しかし、これは非常に危険なアプローチです。このtruncateステートメントはトランザクションを中断するため、必要な場合にロールバックできません。
代わりに、テーブル内のすべてのエンティティを削除することをお勧めします。

$collection = Mage::getModel('[module]/[entity]')->getCollection();
foreach ($collection as $item) {
    $item->delete();
}

これの欠点は、テーブルの増分IDをリセットしないことです。しかし、それはより安全です。

EDIT
メインテーブルの増分IDを更新するには、リソースモデルにこのようなことを行う新しいメソッドを追加できます。

public function changeAutoIncrement($increment = 1) {
    $this->_getWriteAdapter()->query('ALTER TABLE '.$this->getMainTable().' AUTO_INCREMENT = '. $increment);
}

次に、コードでメソッドを呼び出します。

Mage::getResourceModel('[module]/[entity]')->changeAutoIncrement();

2
あなたは事前に私にmagento.thanksにおけるモデルの3種類を言うことができる
MeenakshiSundaram R

3
しょーた エンティティモデルがあります。例:Mage_Catalog_Model_Product。リソースモデルがあります。例:Mage_Catalog_Model_Resource_Product。そして、コレクションリソースモデルがありMage_Catalog_Model_Resource_Product_Collectionます。
マリウス

2
@Marius magentoコレクションで利用可能な自動インクリメントID(その意味は1で始まる)の更新方法を教えてください。
VijayS91 14

2
@VijayS。回答の更新を参照してください。
マリウス

@Marius疑問が1つあります。次に、フラットモデルとEAVモデルとは何ですか?
MeenakshiSundaram R 14

11
$model = Mage::getModel('[module]/[model]');
$resource = $model->getResource();
$connection = $resource->getReadConnection();
/* @see Varien_Db_Adapter_Pdo_Mysql */
$connection->truncateTable($resource->getMainTable());
$connection->changeTableAutoIncrement($resource->getMainTable(), 1);

注: MySQLは1、テーブルを切り捨てるときに自動インクリメント値をリセットするため、必須ではありませんが、changeTableAutoIncrement別の値でAIを開始したい場合に役立ちます。


編集:

この質問は / タグ付けされていました...答えを完成させるためだけに:

  • changeTableAutoIncrement 1.8.0.1で追加されました
  • truncateTable 1.6.0.0-alpha1で追加されました

-1

モデルを作成しましたが、一部の開発では、削除メソッドを実装する必要がありました。それは非常に簡単です。条件付き削除も試みますが、正確なコードを取得できませんでした。ただし、条件付き削除の要件を満たす次のコードを使用しています。

$items = Mage::getModel('custom/csaabandonedcart')->getCollection()
    ->addFieldToFilter('csa_id',Mage::getSingleton('customer/session')
    ->getCustomerId())->addFieldToFilter('customer_id', $retailer)
    ->addFieldToFilter('product_id', $spid);

foreach ($items as $item) {
        $item->delete();
}

1
テーブルの切り捨てについて尋ねています。レコードを削除しないでください。
VijayS91

次のコードを使用して行うことができます。上記のコード参照を検討する場合。$ items-> truncate();
サプナンドゥ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.