2013-02-28 3 views
0

Поскольку мне требуется сопоставить оценки продуктов в формате JSON, я создал модуль с контроллером и файл rating.php в папке модели. Мы запускаем контроллер, он отображает все данные из этой таблицы, но мне нужна только одна строка. Таким образом, через url я передаю параметр, но он не работает. Здесь я прилагаю свой indexcontroller.php. предложите мне это.Magento Controller отображает все строки из таблицы

<?php 
class Modulename_CustomRating_IndexController extends Mage_Core_Controller_Front_Action 
{ 

    public function indexAction() 
    { 

$arrParams = $this->getRequest()->getParams(); 

    var_dump($arrParams); 

$collection = Mage::getModel('Modulename_CustomRating_Model_CustomRating')->getCollection(); 
} 
print_r (json_encode($collection ->getData())); 



} 

} 

?> 

Как я передаю URL, как: локальный/Magento/customrating vote_id = 1, оно принимает параметр к нему, но возвращает данные всей таблицы в?. Я знаю, что это связано с getData(); но как сделать, чтобы получить требуемую строку?

+1

Вы должны посмотреть на функцию addAttributeToFilter() и добавить что-то вроде -> addAttributeToFilter ('vote_id', $ arrParams ['vote_id']) в свою коллекцию. – dagfr

+0

Я не понял. Вы хотите, чтобы несколько строк (все продукты) имели только два столбца (идентификатор продукта, рейтинг) или одну строку (отфильтрованную по идентификатору продукта) со всеми данными для этого продукта? – enenen

+0

@enenen Я хочу только одну строку, отфильтрованную идентификатором продукта. –

ответ

1

Вы должны использовать метод setEntityPkFilter. Проверьте класс Mage_Rating_Model_Resource_Rating_Option_Vote_Collection на другие методы.

$product_id = $this->getRequest()->getParam('product_id'); // or 'vote_id' 

$collection = Mage::getModel('Modulename_CustomRating_Model_CustomRating') 
       ->getResourceCollection() 
       ->setEntityPkFilter($product_id); 

Если вы хотите только 1 колонка, вы можете попробовать некоторые вещи Zend, потому что вы не можете использовать addAttributeToSelect. getSelect() возвращает Zend как запрос:

$adapter = $this->getConnection(); // $this->getConnection(); 

$collection->getSelect() 
      ->reset(Zend_Db_Select::COLUMNS) // remove all columns 
      ->columns('attribute_name'); // add only needed one 

$result = $adapter->fetchAll($select); 

Не уверен, будет ли это работать. Это не проверено, просто идея.

+0

возвращает фатальную ошибку в качестве вызова неопределенного метода. Неустранимая ошибка: вызов неопределенного метода Mage_Rating_Model_Resource_Rating_Option_Vote_Collection :: addAttributeToSelect() в/var/www/html/magento/app/code/local/Modulename/CustomRating/controllerlers/IndexController. php on line 13 Call Stack: 0.0001 324872 1. {main}() /var/www/html/magento/index.php:00 0.0023 413312 –

+0

Попробуйте 'setEntityPkFilter'. Отредактировал мой ответ. – enenen

+0

Да, сэр .. Он работает. Спасибо. Но он возвращает все столбцы данных. Как я могу ограничить здесь другие столбцы, как если бы я хотел только столбца процента, как если бы мы дали значение pk? –

Смежные вопросы