2013-03-13 5 views
12

Я создал модуль и хочу использовать функцию чтения и чтения ядра для вставки, обновления, удаления или выбора значения базы данных с условием, как я могу это сделать без использования SQL? Пример: $ customer_id = 123 Модель = (направление/направление)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'); 
    } 

ВСТАВИТЬ

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

DELETE, UPDATE (с условием) = ???

ответ

24

Предположим, у меня есть модуль с именем 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 является таблица базы данных Идентификатор строки для обновления. $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 = $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/

+0

Thx для такого отличного ресурса .. – ravisoni

+0

Thx! это помогает alot =) –

2

UPDATE - это в основном комбинация SELECT и INSERT. Вы загружаете коллекцию, итератируете по ним, устанавливая значения по мере необходимости, а затем вызывайте -> save() для каждой модели.

DELETE обрабатывается непосредственно через -> delete() functon моделей. Поэтому либо загружайте одну модель, либо перебирайте ее из коллекции SELECTed, а call -> 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

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 ИЛИ УДАЛИТЬ

$id = $this->getRequest()->getParam('id'); 
    $model = Mage::getModel('plugin/plugin'); 
    $model->setId($id)->delete(); 
    echo "Data deleted successfully."; 
Смежные вопросы