Работа с несколькими объектами одного типа (PHP) - PullRequest
0 голосов
/ 03 августа 2011

Как работает corecte со всеми объектами лота одного типа?

Пример:

Когда я получаю список заметок из базы данных с помощью Zend Framework, я получаю набор строккоторый содержит массив с данными заметок.

Если количество заметок в базе данных составляет 20 записей, нет проблем создать объект заметки для каждой заметки в базе данных.Но если база данных содержит 12 500 записей записей, что мне делать, чем?Попытка создать 12.500 объектов возможна, но она не достаточно быстра.

Ty, Mark

Это код, который я использую.

Код для получения данных избаза данных:

if (is_numeric($id) && $id > 0) {
    $select = $this->getDao()->select();
    $select->where('methode_id = ?', $id);
    $select->order('datum DESC');
    $rowset = $this->getDao()->fetchAll($select);
    if (null != $rowset) {
        $result = $this->createObjectArray($rowset);
    }
}

функция createObjectArray:

protected function createObjectArray(Zend_Db_Table_Rowset_Abstract $rowset)
    {
        $result = array();
        foreach ($rowset as $row) {
            $model = new Notes();
            $this->populate($row, $model);
            if (isset($row['id'])) {
                $result[$row['id']] = $model;
            } else {
                $result[] = $model; 
            }
        }//endforeach;
        return $result;
    }

Заполнение функции

private function populate($row, $model)
    {
        // zet de purifier uit om overhead te voorkomen
        if (isset($row['id'])) {
            $model->setId($row['id']);
        }
        if (isset($row['type'])) {
            $model->setType($row['type']);
        }
        if (isset($row['tekst'])) {
            $model->setLog($row['tekst']);
        }
        if (isset($row['methode_id'])) {
            $model->setSurveyMethodId($row['methode_id']);
        }
        if (isset($row['klant_id'])) {
            $model->setCustomerId($row['klant_id']);
        }
        if (isset($row['gebruiker_aangemaakt_tekst'])) {
            $model->setCreatedByUser($row['gebruiker_aangemaakt_tekst']);
        }
        if (isset($row['gebruiker_gewijzigd_tekst'])) {
            $model->setUpdatedByUser($row['gebruiker_gewijzigd_tekst']);
        }
        if (isset($row['gebruiker_aangemaakt'])) {
            $model->setCreatedByUserId($row['gebruiker_aangemaakt']);
        }
        if (isset($row['gebruiker_gewijzigd'])) {
            $model->setUpdatedByUserId($row['gebruiker_gewijzigd']);
        }
        if (isset($row['datum_aangemaakt'])) {
            $model->setDateCreated($row['datum_aangemaakt']);
        }
        if (isset($row['datum_gewijzigd'])) {
            $model->setDateUpdated($row['datum_gewijzigd']);
        }

        $model->clearMapper();
        return $model;
    }

Ответы [ 2 ]

0 голосов
/ 03 августа 2011

Я не уверен в вашем вопросе.Например:

//Create a single object
$obj = new NoteObject();

//Set the properties if it differs
$obj->setX( $row );
//Make use of the method
$obj->processMethod();

Таким образом, вам нужен только один объект.Давайте посмотрим код, если он не дает вам правильный ответ.

Редактировать:

То, что я думал, было в

protected function createObjectArray(Zend_Db_Table_Rowset_Abstract $rowset)
{
    $result = array();
    //Create the model here
    $model = new Notes();
    foreach ($rowset as $row) {
        //Yes populate the values
        $this->populate($row, $model);
        /*
        And not like saving the object here in array
        if (isset($row['id'])) {
            $result[$row['id']] = $model;
        } else {
            $result[] = $model; 
        }*/
        //Do some calculations and return the result in array
        $result[$row['id']] = $this->doSomething();
    }//endforeach;
    return $result;
}

Я не уверен, почему вы держитеэтот объект там сам.Любое повторное использование?наверное, пострадаю и делаю: -)

0 голосов
/ 03 августа 2011

Вы могли бы публиковать свои запросы, поэтому каждый раз вы получаете только заданное количество заметок. Хотя я не вижу проблемы с «только 12 500» объектами, если создание вашего объекта не требует больших затрат, то есть больше запросов к базе данных и т. Д.

...