13

我创建了一个模块,想使用核心读写功能来插入、更新、删除或选择有条件的数据库值,不使用 SQL 怎么办?示例:$customer_id=123 型号=(推荐/推荐)

选择

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

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

4

5 回答 5

25

假设,我有一个名为mynews. 以下是表格中的select, insert, update, and delete data代码news

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/

于 2013-03-13T10:08:00.570 回答
2

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

DELETE 通过模型的 ->delete() 函数直接处理。因此,要么加载单个模型,要么迭代它们的 SELECTed 集合并调用 ->delete()

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

于 2013-03-13T04:29:43.353 回答
1

更新

    $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.";
于 2015-10-24T06:49:39.230 回答
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);
于 2013-03-13T09:48:44.963 回答
0

如果你想删除基于集合的条件,你可以使用addFieldToFilteraddAttributeToFilter

$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(); 
}
于 2014-06-18T06:47:36.517 回答