2013-03-13 17 views
12

Stworzyłem moduł i chciałbym użyć rdzeń funkcji zapisu i odczytu, aby wstawić, zaktualizować, usunąć lub wybrać wartość bazy danych z warunkiem, w jaki sposób mogę to zrobić bez użycia SQL? przykład: $ klient_id = 123 modelu = (referencyjny/referencyjny)Magento - Moduł WSTAW, AKTUALIZACJA, USUŃ, WYBIERZ kod

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

WSTAW

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

USUŃ Update (warunku) = ???

Odpowiedz

24

Załóżmy, że mam moduł o nazwie mynews. Tutaj następuje kod do select, insert, update, and delete data z tabeli news.

INSERT DATA

$data zawiera tablicę danych do wstawienia. Kluczem tablicy powinna być nazwa pola tabeli bazy danych, a wartość powinna być wartością do wstawienia.

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

Podobnie, aby wydrukować zawartość, musimy napisać $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 jest baza danych wiersz tabeli id ​​być aktualizowany. $data zawiera tablicę danych do aktualizacji. Kluczem tablicy powinna być nazwa pola tabeli bazy danych, a wartość powinna być wartością do zaktualizowania.

// $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 jest baza danych wiersza tabeli ID być usunięte.

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

W ten sposób można wykonać SELECT, INSERT, aktualizowanie i usuwanie w module niestandardowego aw każdym magento code.

Źródło: http://blog.chapagain.com.np/magento-how-to-select-insert-update-and-delete-data/

+0

Thx za tak wielki zasób .. – ravisoni

+0

Thx! pomaga alot =) –

2

UPDATE jest po prostu kombinacją SELECT i INSERT. Załadujesz kolekcję, wykonujesz iteracje, ustawiając wartości według potrzeb, a następnie wywołujesz -> save() w każdym modelu.

DELETE jest obsługiwane bezpośrednio za pomocą funkcji -> delete() modeli. Tak więc albo załaduj pojedynczy model, albo powtórz jego wybraną kolekcję i wywołaj -> usuń()

(To nie jest "najszybszy" sposób wykonywania tych operacji w kolekcjach (ponieważ jeden z nich wygeneruje nowe zapytanie, zamiast pojedynczego zapytania, które obsługuje jednocześnie wiele usunięć), ale wydajność jest dobra dla małych zestawów danych/SELECT (mniej niż 1k?) lub dla rzeczy, które nie robią bardzo często (jak importowanie lub aktualizację ceny ok produktów 10k raz dziennie).

+0

Czy możesz podać przykład? thx =) –

0

można użyć kwerendy wybierającej takiego również. jej bardzo proste.

$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

Jeśli chcesz usunąć z warunku na podstawie kolekcji można użyć 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 LUB USUŃ

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