使用相同类型的多个对象(PHP)

时间:2011-08-03 11:55:37

标签: php oop zend-framework zend-db-table

处理相同类型的al lot对象的corecte方法是什么?

示例:

当我使用zend框架从数据库中获取一个注释列表时,我得到一个包含带注释数据的数组的行集。

如果数据库中的注释数量是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 :(得分:0)

您可以对您的请求进行分页,因此每次只能获得一定数量的备注。虽然我看不到“只有12,500”对象的问题,但除非您的对象创建成本高昂,即对数据库进行更多查询等。

答案 1 :(得分:0)

我对你的问题不太确定。 例如:

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

我不确定你为什么要把这个物体放在那里。任何重用?可能的分页并做: - )