モジュールを作成し、コアの書き込みおよび読み取り機能を使用して、条件付きのデータベース値を挿入、更新、削除、または選択したいのですが、SQLを使用せずにそれを行うにはどうすればよいですか?例:$ customer_id = 123 Model =(referral/referral)
選択する
$collection3 = Mage::getModel('referral/referral')->getCollection();
$collection3->addFieldToFilter('customer_id', array('eq' => $customer_id));
foreach($collection3 as $data1)
{
$ref_cust_id.= $data1->getData('referral_customer_id');
}
インサート
$collection1= Mage::getModel('referral/referral');
$collection1->setData('customer_id',$customer_id)->save();
DELETE、UPDATE(条件付き)= ???
mynews
という名前のモジュールがあるとします。次に、news
テーブルから_select, insert, update, and delete data
_へのコードを示します。
_INSERT DATA
_
_$data
_には、挿入するデータの配列が含まれています。配列のキーはデータベーステーブルのフィールド名で、値は挿入する値である必要があります。
_$data = array('title'=>'hello there','content'=>'how are you? i am fine over here.','status'=>1);
$model = Mage::getModel('mynews/mynews')->setData($data);
try {
$insertId = $model->save()->getId();
echo "Data successfully inserted. Insert ID: ".$insertId;
} catch (Exception $e){
echo $e->getMessage();
}
_
_SELECT DATA
_
_$item->getData() prints array of data from ‘news’ table.
$item->getTitle() prints the only the title field.
_
同様に、コンテンツを印刷するには、$item->getContent()
と記述する必要があります。
_$model = Mage::getModel('mynews/mynews');
$collection = $model->getCollection();
foreach($collection as $item){
print_r($item->getData());
print_r($item->getTitle());
}
_
_UPDATE DATA
_
_$id
_は、更新するデータベーステーブルの行IDです。 _$data
_には、更新するデータの配列が含まれています。配列のキーはデータベーステーブルのフィールド名であり、値は更新される値である必要があります。
_// $id = $this->getRequest()->getParam('id');
$id = 2;
$data = array('title'=>'hello test','content'=>'test how are you?','status'=>0);
$model = Mage::getModel('mynews/mynews')->load($id)->addData($data);
try {
$model->setId($id)->save();
echo "Data updated successfully.";
} catch (Exception $e){
echo $e->getMessage();
}
_
_DELETE DATA
_
_$id
_は、削除するデータベーステーブルの行IDです。
_// $id = $this->getRequest()->getParam('id');
$id = 3;
$model = Mage::getModel('mynews/mynews');
try {
$model->setId($id)->delete();
echo "Data deleted successfully.";
} catch (Exception $e){
echo $e->getMessage();
}
_
このようにして、カスタムモジュールおよび_magento code
_で選択、挿入、更新、削除を実行できます。
ソース: http://blog.chapagain.com.np/magento-how-to-select-insert-update-and-delete-data/
UPDATEは基本的にSELECTとINSERTの組み合わせです。コレクションをロードし、必要に応じて値を設定してそれらを反復処理してから、各モデルで-> save()を呼び出します。
DELETEは、モデルの-> delete()関数を介して直接処理されます。したがって、単一のモデルをロードするか、それらのSELECTされたコレクションを反復処理して、-> delete()を呼び出します。
(反復のため、これはコレクションに対してこれらの操作を実行する「最速」の方法ではありません(それぞれが一度に複数の削除を処理する単一のクエリではなく、新しいクエリを生成するため)が、パフォーマンス小さなデータセット/ SELECT(1,000未満?)またはあまり頻繁に実行しないもの(1日1回、10,000個の製品の価格のインポートまたは更新など)には問題ありません。
更新用
$new=$this->getRequest()->getParams();
$id=$new['id'];
$name=$new['name'];
$con=Mage::getModel('plugin/plugin')->load($id);
$con->setData('name',$name)->save();
echo "Update Success";
削除の場合
$id = $this->getRequest()->getParam('id');
$model = Mage::getModel('plugin/plugin');
$model->setId($id)->delete();
echo "Data deleted successfully.";
このような選択クエリも使用できます。それは非常に簡単です。
$salesInvoiceCollection_sql = "SELECT `entity_id` , `increment_id`,`order_id`
FROM `sales_flat_invoice`
WHERE `erp_invoice_id` = 0
ORDER BY `entity_id`
DESC limit 1000";
$salesInvoiceCollection = Mage::getSingleton('core/resource')->getConnection('core_read')->fetchAll($salesInvoiceCollection_sql);
コレクションに基づく条件で削除する場合は、addFieldToFilter
、addAttributeToFilter
を使用できます
$model = Mage::getModel('mynews/mynews')->getCollection();
try {
$model->addAttributeToFilter('status', array('eq' => 1));
$model->walk('delete');
echo "Data deleted successfully.";
} catch (Exception $e){
echo $e->getMessage();
}