2013-03-13 2 views
12

모듈을 생성하고 삽입, 업데이트, 삭제 또는 조건을 가진 데이터베이스 값을 선택하기 위해 코어 쓰기 및 읽기 기능을 사용하고 싶습니다. SQL을 사용하지 않고 어떻게 할 수 있습니까? 예 :Magento - 모듈 INSERT, UPDATE, DELETE, 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(); 

는 삭제를 선택 $ CUSTOMER_ID = 123 모델 = (추천/참조), (조건) UPDATE = ??

답변

24

mynews이라는 모듈이 있다고 가정 해 보겠습니다. 다음은 news 표의 select, insert, update, and delete data 코드입니다.

INSERT DATA

$data 데이터의 배열을 삽입 할 포함한다. 배열의 키는 데이터베이스 테이블의 필드 이름이어야하며 값은 삽입 할 값이어야합니다.

$item->getData() prints array of data from ‘news’ table. 
$item->getTitle() prints the only the title field. 

SELECT 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(); 
} 

마찬가지로, 내용을 인쇄하기 위해, 우리는 $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입니다. 당신이 선택, 삽입, 업데이트를 수행하고 사용자 정의 모듈 및 magento code에서 삭제할 수 있습니다 이런 식으로

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

.

출처 : UPDATE에 대한 http://blog.chapagain.com.np/magento-how-to-select-insert-update-and-delete-data/

+0

그런 위대한 자원을위한 Thx. – ravisoni

+0

Thx! 도움이된다 =) –

2

기본적으로 UPDATE는 SELECT와 INSERT의 조합입니다. 컬렉션을로드하고 필요에 따라 값을 반복 한 다음 각 모델에서 save -> save()를 호출합니다.

DELETE는 모델의 -> delete() functon을 통해 직접 처리됩니다. 따라서 하나의 모델을로드하거나 SELECTED 콜렉션을 반복하고 -> delete()를 호출하십시오.

(반복으로 인한 것이 아니라 콜렉션에서 이러한 연산을 수행하는 '가장 빠른'방법이 아닙니다. 하나는 한번에 여러 개의 삭제를 처리하는 단일 쿼리 대신 새로운 쿼리를 생성합니다), 성능은 작은 데이터 세트/SELECT (1k 미만) 또는 사용자가별로하지 않는 것에 대해서는 문제가 없습니다. 당신은 또한이 같은 선택 쿼리를 사용하여 자주 (수입 가격을 하루에 한 번 확인 10K 제품을 업데이트하는 등).

+0

몇 가지 예가 있습니까? thx =) –

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

$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 삭제 또는 삭제

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