代码之家  ›  专栏  ›  技术社区  ›  Lim Heng Cheun

Magento-模块INSERT、UPDATE、DELETE、SELECT代码

  •  13
  • Lim Heng Cheun  · 技术社区  · 12 年前

    我创建了一个模块,想使用核心的写和读功能来插入、更新、删除或选择有条件的数据库值,如果不使用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();
    

    DELETE,UPDATE(带条件)=???

    5 回复  |  直到 12 年前
        1
  •  25
  •   Mukesh Chapagain    8 年前

    假设,我有一个名为 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。 $数据 包含要更新的数据数组。数组的键应该是数据库表字段名,值应该是要更新的值。

    // $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/

        2
  •  2
  •   Jared Kipe    12 年前

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

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

    (并不是因为迭代,这不是对集合执行这些操作的“最快”方式(因为每个集合都将生成一个新的查询,而不是一个同时处理多个删除的单个查询),但无论是小数据集/SELECTs(小于1k?)还是不经常做的事情(比如每天导入或更新一次10k产品的价格),性能都很好。

        3
  •  1
  •   Ashwin Shahi    9 年前

    用于更新

        $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.";
    
        4
  •  0
  •   sanji    12 年前

    您也可以像这样使用选择查询。这很容易。

    $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);
    
        5
  •  0
  •   Rahul Dadhich    10 年前

    如果您想删除基于集合的条件,您可以使用 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(); 
    }