2015-07-29 3 views
4

Прямо сейчас, я написал функцию в моей модели как:Получение таблицы объектов (App_Model_TableName), как принести результат (Zend Framework)

public function getRowsByZipCode($zip) 
{ 
    // SQL to get all the rows with the given zip code 
    $stmt = $this -> getAdapter() 
        -> query( "SELECT * 
           FROM 
            table_name 
           WHERE 
            table_name.status = 1 AND 
            table_name.zip={$zip}");  
    $resultRows = $stmt->fetchAll(); 

    // -------------------------------------------------------- //   
    // Convert result set to an array of objects 
    $resultObjects = array(); 
    // If there is atleast one row found in DB 
    if(count($resultRows) > 0) 
    { 
     // Loop throguh all the rows in the resultset 
     foreach($resultRows as $resultRow) { 
      // Create table row and fill it with the details got from DB 
      $h = $this->createRow(); 
      $h->setFromArray($resultRow); 

      // Add to the array 
      $resultObjects[] = $h; 
     } 
    } 
    return $resultObjects; 
    // -------------------------------------------------------- // 
} 

, который работает прекрасно, как мне нужно. И это возвращает мне массив, содержащий объекты таблицы строк (App_Model_TableName объектов), , который будет использоваться в дальнейшем для дальнейших операций, таких как сохранение и удаление т.д.

То, что я действительно хочу, чтобы удалить код, который проходит через строки, полученные из набора результатов, и преобразовывая каждую строку в объект App_Model_TableName, который я написал в комментариях // --- //.

Заранее спасибо.

+0

Вы используете какой-то сторонний пакет с getAdapter и т. Д. Какой пакет? На самом деле вопрос направлен на это, а не php или mysql. Пожалуйста, добавьте 'zend' (или что-то еще) в заголовок. –

+0

Rick, я вообще не использую сторонний API. – Pushpendra

+1

Что такое 'Zend'? Что такое 'setFromArray'? –

ответ

0

Наконец, я нашел решение:

public function getRowsByZipCode($zip) 
{ 
    // SQL to get all the rows with the given zip code 
    $stmt = $this -> getAdapter() 
        -> query( "SELECT * 
           FROM 
            table_name 
           WHERE 
            table_name.status = 1 AND 
            table_name.zip={$zip}");  
    $resultObjects= array(); 
    while($data = $stmt->fetch()) 
    { 
     $h = $this->createRow(); 
     $h->setFromArray($data); 

     // Add to array 
     $resultObjects[] = $h;; 
    } 
    return $resultObjects; 
} 

я удалить код, который делают в fetchAll() и через петлю каждой строки в результирующем. Теперь я беру каждую строку из набора результатов и создаю строку объекта App_Model_TableName, используя данные, полученные из набора результатов.

Работаю идеально для меня.

2

Во-первых, я предполагаю, что вы используете PDO.

Попробуйте следующее

class App_Model_TableName 
{ 
    public $status; 
    public $zip; 
    // public $other_column; 
} 

class YourClass 
{ 
    protected function getAdapter() 
    { 
     // Do adapter stuffs 
    } 

    public function query($query, array $param) 
    { 

     // When Using PDO always use prepare and execute when you pass in a variable 
     // This will help prevent SQL injection 
     $stmt = $this->getAdapter()->prepare($query); 
     return $query->execute($param); 
    } 

    /** 
    * @return App_Model_TableName[] 
    */ 
    public function getRowsByZipCode($zip) 
    { 
     // SQL to get all the rows with the given zip code 
     // This way will help prevent SQL injection 
     $query = "SELECT * FROM table_name WHERE table_name.status = 1 AND table_name.zip = :zip";  
     $qData = array(':zip' => $zip); 

     $results = $this->query($query, $qData); 

     return $results->fetchAll(PDO::FETCH_CLASS, 'App_Model_TableName'); 
    } 
}  

Вызов YourClass::getRowsByZipCode() затем вернет вам массив App_Model_TableName объектов. Вы можете получить доступ к ним как:

$data = $instance_of_yourclass->getRowsByZipCode(12345);  
foreach ($data as $row) 
{ 
    echo $row->zip; 
    echo $row->do_stuff(); 
} 

Все эти удивительные функции, которые я нашел на:

Отказ от ответственности: этот код не был протестирован :(

Be круто, но остаются теплыми

+0

Извините, но проект реализован с использованием рамки Zend 1.12. И он не поддерживает режим выборки FETCH_CLASS. – Pushpendra