开发者

Working with multiple objects of the same type (PHP)

开发者 https://www.devze.com 2023-03-25 03:23 出处:网络
What is the corecte way to handle with al lot objects of the same type? Example: When i get a list of notes from the database with zend framework i get a rowset which contains an array with note dat

What is the corecte way to handle with al lot objects of the same type?

Example:

When i get a list of notes from the database with zend framework i get a rowset which contains an array with note data.

If the number of notes in the database is 20 records large it's no problem to create a note object for every note in the database. But if the database contains 12.500 note records what shall i do than? Try to create 12.500 objects is possible but it's shure isn't quick enough.

Ty, Mark

This is the code i use.

Code to get the data from the database:

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 function:

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;
    }

Populate function

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'])) {
        开发者_如何学JAVA    $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;
    }


You could page your requests, so you only get a set amount of notes back each time. Although I can't see a problem with "only 12,500" objects, unless your object creation is doing something costly, i.e more queries on the database etc.


I am not so sure about your question. For eg :

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

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

So this way you just need a single object. Lets see the code if its not to give you a right answer.

Edit :

What I thought was in

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;
}

I am not sure why you are keeping this object there itself. Any reuse ? the probably paginate and do :-)

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号