2013-03-13 58 views
12

我创建了一个模块,并希望使用核心写入和读取功能插入,更新,删除或选择数据库值的条件,我怎么能不使用SQL? 实施例: $ CUSTOMER_ID = 123 模型=(引荐/引荐)Magento - 模块插入,更新,删除,选择代码

SELECT

$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'); 
    } 

INSERT

$collection1= Mage::getModel('referral/referral'); 
$collection1->setData('customer_id',$customer_id)->save(); 

删除,更新(与条件)= ???

回答

24

假设我有一个名为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(); 
} 

通过这种方式,您可以执行SELECT,INSERT,UPDATE和您的自定义模块,并在任何magento code删除。

来源:http://blog.chapagain.com.np/magento-how-to-select-insert-update-and-delete-data/

+0

Thx这么好的资源.. – ravisoni 2013-03-13 11:07:42

+0

Thx!它有助于很多=) – 2013-03-14 05:47:34

2

UPDATE基本上是SELECT和INSERT的组合。你加载一个集合,迭代它们来根据需要设置值,然后在每个模型上调用 - > save()。

DELETE直接通过模型的 - > delete()函数处理。因此,无论是加载单个模型还是遍历SELECTed集合,并调用 - > delete()

(不是因为迭代,这不是对集合执行这些操作的“最快”方式(因为每个一个将生成一个新的查询,而不是一次处理多个删除的单个查询),但是对于小数据集/ SELECT(小于1k?)或者对于您不擅长的事情来说性能不错常(如导入或更新价格每天一次OK 10K的产品)。

+0

可以举一些例子吗? thx =) – 2013-03-13 04:35:39

0

你可以用这样也选择查询。它很容易。

$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); 
0

如果您想根据收集您可以使用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(); 
} 
1

FOR UPDATE

$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"; 

˚F OR DELETE

$id = $this->getRequest()->getParam('id'); 
    $model = Mage::getModel('plugin/plugin'); 
    $model->setId($id)->delete(); 
    echo "Data deleted successfully.";