2013-03-13 30 views
12

Tôi đã tạo ra một mô-đun và muốn sử dụng chức năng viết và đọc lõi để chèn, cập nhật, xóa hoặc chọn giá trị cơ sở dữ liệu với điều kiện, làm thế nào tôi có thể làm điều đó mà không cần sử dụng SQL? Ví dụ: $ customer_id = 123 Model = (giới thiệu/giấy giới thiệu)Magento - Module INSERT, UPDATE, DELETE, CHỌN mã số

CHỌN

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

DELETE, UPDATE (với điều kiện) = ???

Trả lời

24

Giả sử, tôi có một mô-đun có tên là mynews. Ở đây, hãy làm theo mã số select, insert, update, and delete data từ bảng news.

INSERT DATA

$data chứa mảng dữ liệu được chèn vào. Khóa của mảng phải là tên trường của bảng cơ sở dữ liệu và giá trị phải là giá trị được chèn vào.

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

Tương tự như vậy, để in nội dung, chúng tôi cần phải viết $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 là cơ sở dữ liệu bảng hàng id được cập nhật. $data chứa mảng dữ liệu cần được cập nhật. Khóa của mảng phải là tên trường của bảng cơ sở dữ liệu và giá trị phải là giá trị được cập nhật.

// $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 là cơ sở dữ liệu bảng hàng id để bị xóa.

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

Bằng cách này, bạn có thể thực hiện chọn, chèn, cập nhật và xóa trong mô-đun tùy chỉnh và trong bất kỳ magento code nào.

Nguồn: http://blog.chapagain.com.np/magento-how-to-select-insert-update-and-delete-data/

+0

Thx cho một nguồn tài nguyên tuyệt vời như vậy .. – ravisoni

+0

Thx! nó giúp rất nhiều =) –

2

CẬP NHẬT về cơ bản là sự kết hợp giữa CHỌN và CH INSN. Bạn tải một bộ sưu tập, lặp lại chúng thiết lập các giá trị khi cần thiết, sau đó gọi -> save() trên mỗi mô hình.

DELETE được xử lý trực tiếp qua -> delete() functon của các kiểu máy. Vì vậy, hoặc tải một mô hình duy nhất hoặc lặp qua bộ sưu tập được chọn của họ và gọi -> delete()

(Không phải do lặp lại, đây không phải là cách nhanh nhất để thực hiện các thao tác này trên bộ sưu tập (vì mỗi người ta sẽ tạo truy vấn mới, thay vì một truy vấn duy nhất xử lý nhiều lần xóa cùng một lúc), nhưng hiệu suất là tốt cho các tập dữ liệu nhỏ/SELECT (ít hơn 1k?) hoặc cho những thứ bạn không làm thường (như nhập hoặc cập nhật giá sản phẩm 10k ok một lần mỗi ngày).

+0

Có thể đưa ra một số ví dụ? thx =) –

0

Bạn có thể sử dụng chọn truy vấn như thế này cũng có. nó rất dễ dàng.

$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

Nếu bạn muốn xóa với điều kiện dựa trên bộ sưu tập bạn có thể sử dụng 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 HOẶC DELETE

$id = $this->getRequest()->getParam('id'); 
    $model = Mage::getModel('plugin/plugin'); 
    $model->setId($id)->delete(); 
    echo "Data deleted successfully."; 
Các vấn đề liên quan