2012-02-09 30 views
5

Tôi đang sử dụng mã sau để lấy một số dữ liệu từ một bảng.Nhận chuỗi truy vấn thu thập

$collection = Mage::getModel('bannerslider/bannerslider')->getCollection() 
     ->addFieldToFilter('status',1) 
     ->addFieldToFilter('is_home',$this->_display) 
    ->addOrder('position', 'ASC') 
     ; 

Chỉ cần cho sự tò mò của tôi, tôi muốn kiểm tra các truy vấn được thực hiện ở đây và tôi đang vang sử dụng mã này

$collection->printLogQuery(true); 

var_dump((string)$collection->getSelect()); 

Bây giờ, vấn đề của tôi là chuỗi

SELECT `main_table`.* FROM `bannerslider` AS `main_table` WHERE (status = '1') AND (is_home = '0') 

không hiển thị trạng thái cuối cùng của tôi, addOrder nhưng bộ sưu tập thực sự được sắp xếp theo trường vị trí, tôi đã kiểm tra điều đó.

Điều tôi không hiểu là tại sao điều kiện đơn hàng không hiển thị trong truy vấn. Cảm ơn bạn.

Trả lời

13

Lý do để bạn không hiển thị là do đơn đặt hàng được thêm vào truy vấn trong phương pháp load().
Xem Varien_Data_Collection_Db::load()

public function load($printQuery = false, $logQuery = false) 
{ 
    // ... removed for brevity 

    $this->_renderFilters() 
     ->_renderOrders() 
     ->_renderLimit(); 

    $this->printLogQuery($printQuery, $logQuery); 
    $data = $this->getData(); 

    // ... removed for brevity 
} 

Nếu bạn muốn gọi $collection->load(true) bạn sẽ thấy SQL có chứa trình tự quy định tại khoản.

+0

cảm ơn bạn đã trả lời. làm rõ vấn đề của tôi. – Ovidiu

1

Bạn có thể thử bằng cách sử dụng phương pháp addAtributeToSort() như thế này:

$collection = Mage::getModel('bannerslider/bannerslider')->getCollection() 
    ->addFieldToFilter('status',1) 
    ->addFieldToFilter('is_home',$this->_display) 
    ->addAtributeToSort('position', 'ASC'); 

này hoạt động trên Magento CE 1.5.1, tôi hy vọng nó sẽ cho bạn.

+1

Phương thức 'addAttributeToSort()' chỉ có sẵn trên các bộ sưu tập dựa trên EAV mở rộng 'Mage_Eav_Model_Entity_Collection_Abstract'. Vì truy vấn trong câu hỏi là đề cập đến các thuộc tính phải là một phần của bảng chính, nó rất có thể không phải là một thực thể dựa trên EAV. – Vinai

+0

Nhanh chóng và hiệu quả, cảm ơn nó đã giúp! – Mateo

+0

ngoài những gì @Vinai cho biết, Bộ sưu tập đó không thuộc về thực thể EAV. Đó là từ một mô-đun với bảng riêng của nó. – Ovidiu

4

Làm việc với các bộ sưu tập thử những điều tiếp theo:

$collection->setOrder('position', 'ASC'); // main order setter 
$collectioon->getSelect()->order('position asc'); // alternative order setter 

$collection->load(); // some times you need to call load() to be sure your collection don't get changes later in some place 
echo $collection->getSelect(); // to print query 

Hy vọng nó giúp

Các vấn đề liên quan