Login | Register
My pages Projects Community openCollabNet

Discussions > dev > RE: [propel-dev] PropelResultset Iterator

propel
Discussion topic

Back to topic list

RE: [propel-dev] PropelResultset Iterator

Reply

Author Sven Tietje <tietje at topconcepts dot de>
Full name Sven Tietje <tietje at topconcepts dot de>
Date 2006-10-04 02:56:24 PDT
Message David Zulke wrote:
> 1) memory consumption is a lot lower, e.g. when iterating over 1000
> rows to display them, a row is fetched, the data is displayed, and
> the GC can then go ahead and destroy the object.

Think, that should be an option. Sometimes, i want do iterator over a
resultset and to write baseobjects with special information into an array or
something like that. PDO handles it the same way - Fetchmode gives you
special options for fetching as object:

http://de.php.net/ma​nual/de/function.pdo​statement-setfetchmo​de.php
Using PDO::FETCH_CLASS will result into an object-instance for each row: 200
rows in your resultset will give you 200 object-instances.

PDO::FETCH_INTO will give you the same object-instance for each row: 200
rows, but one object-instance.

Having the same feature / option for propel would be nice:

1. One Instance for all rows
$resultset = TablePeer::doSelect(new Criteria(), PROPEL::ONE_OBJECT);

foreach ($resultset as $row) {
    echo $row //will give you the same object instance
}
    
I would use PROPEL::ONE_OBJECT to publish big resultsets. I don`t manipulate
the object. With $myrow = clone $row it is possible to get my own instance
of the row.
    
2. An Instance for each row
$resultset = TablePeer::doSelect(new Criteria(), PROPEL::EACH_OBJECT);
foreach ($resultset as $row) {
    echo $row //will result in Object#1, Object#2 ..... Object#200
}

Internally Propel uses clone() to create a single instance of each row.

> 2) it opens the door for a potential
> CategoryPeer::doSele​ctJoinProducts() support, where fetching 1:n
> relations with a join would become possible.

We should discuss to use
PDOStatement::setFetchMode ( int PDO::FETCH_CLASS, string classname ) or
PDOStatement::setFetchMode ( int PDO::FETCH_INTO, object object )
instead of hydrate();

I wrote a little script to test it:

$stmt = $pdo->prepare('select name as `customer.name` from customer');
$stmt->execute(array());

class baseobject /*implements ArrayAccess*/ {
    private $data = array(
        'customer.name' => null,
    );
    
    // for hydrate
    public function __set($key, $value) {
        $this->data[$key] = $value;
    }

    public function setName($value) {
        $this->data['customer.name'] = $value;
    }
    
    public function getName() {
        if (isset($this->da​ta['customer.name'])​) {
            return $this->data['cus​tomer.name'];
        }

    }
}

$blub = new baseobject;
$stmt->setFetchM​ode(PDO::FETCH_INTO,​ $blub);

$arg = array();
while ($b = $stmt->fetch()) {
    // $b->setName('blah');
    var_dump($b->getName());
}

Implement ArrayAccess into an BaseObject could be a possibility, too. We
should discuss it.

Your opinion? I think to use the power of pdo would be nice.

« Previous message in topic | 5 of 26 | Next message in topic »

Messages

Show all messages in topic

PropelResultset Iterator Sven Tietje <tietje at topconcepts dot de> Sven Tietje <tietje at topconcepts dot de> 2006-10-02 01:43:05 PDT
     Re: [propel-dev] PropelResultset Iterator =?ISO-8859-1?Q?David_Z=FClke?= <dz at bitxtender dot com> =?ISO-8859-1?Q?David_Z=FClke?= <dz at bitxtender dot com> 2006-10-02 02:04:45 PDT
     Re: [propel-dev] PropelResultset Iterator =?ISO-8859-1?Q?David_Z=FClke?= <dz at bitxtender dot com> =?ISO-8859-1?Q?David_Z=FClke?= <dz at bitxtender dot com> 2006-10-03 05:13:38 PDT
         Re: [propel-dev] PropelResultset Iterator Alan Pinstein <apinstein at mac dot com> Alan Pinstein <apinstein at mac dot com> 2006-10-03 06:07:14 PDT
         RE: [propel-dev] PropelResultset Iterator Sven Tietje <tietje at topconcepts dot de> Sven Tietje <tietje at topconcepts dot de> 2006-10-04 02:56:24 PDT
             Re: [propel-dev] PropelResultset Iterator Alan Pinstein <apinstein at mac dot com> Alan Pinstein <apinstein at mac dot com> 2006-10-04 07:15:25 PDT
                 RE: [propel-dev] PropelResultset Iterator Sven Tietje <tietje at topconcepts dot de> Sven Tietje <tietje at topconcepts dot de> 2006-10-04 07:48:00 PDT
                     Re: [propel-dev] PropelResultset Iterator Alan Pinstein <apinstein at mac dot com> Alan Pinstein <apinstein at mac dot com> 2006-10-04 07:52:18 PDT
                         Re: [propel-dev] PropelResultset Iterator hlellelid Hans Lellelid 2006-10-04 07:56:14 PDT
                             Re: [propel-dev] PropelResultset Iterator Alan Pinstein <apinstein at mac dot com> Alan Pinstein <apinstein at mac dot com> 2006-10-04 07:58:28 PDT
                             Re: [propel-dev] PropelResultset Iterator =?ISO-8859-1?Q?David_Z=FClke?= <dz at bitxtender dot com> =?ISO-8859-1?Q?David_Z=FClke?= <dz at bitxtender dot com> 2006-10-04 08:00:10 PDT
                                 Re: [propel-dev] PropelResultset Iterator hlellelid Hans Lellelid 2006-10-04 08:05:23 PDT
                                     Re: [propel-dev] PropelResultset Iterator hlellelid Hans Lellelid 2006-10-04 08:09:56 PDT
                                         Re: [propel-dev] PropelResultset Iterator Alan Pinstein <apinstein at mac dot com> Alan Pinstein <apinstein at mac dot com> 2006-10-04 08:15:54 PDT
                                             Re: [propel-dev] PropelResultset Iterator hlellelid Hans Lellelid 2006-10-04 08:19:39 PDT
                             RE: [propel-dev] PropelResultset Iterator Sven Tietje <tietje at topconcepts dot de> Sven Tietje <tietje at topconcepts dot de> 2006-10-04 08:06:19 PDT
                                 Re: [propel-dev] PropelResultset Iterator Alan Pinstein <apinstein at mac dot com> Alan Pinstein <apinstein at mac dot com> 2006-10-04 08:25:56 PDT
                                     Re: [propel-dev] PropelResultset Iterator =?ISO-8859-1?Q?David_Z=FClke?= <dz at bitxtender dot com> =?ISO-8859-1?Q?David_Z=FClke?= <dz at bitxtender dot com> 2006-10-04 08:31:18 PDT
                                     Re: [propel-dev] PropelResultset Iterator Sven Tietje <mail at sven-tietje dot de> Sven Tietje <mail at sven-tietje dot de> 2006-10-04 11:11:24 PDT
                                         Re: [propel-dev] PropelResultset Iterator =?ISO-8859-1?Q?David_Z=FClke?= <dz at bitxtender dot com> =?ISO-8859-1?Q?David_Z=FClke?= <dz at bitxtender dot com> 2006-10-04 11:20:35 PDT
                                             Re: [propel-dev] PropelResultset Iterator Alan Pinstein <apinstein at mac dot com> Alan Pinstein <apinstein at mac dot com> 2006-10-04 11:29:47 PDT
                                                 Re: [propel-dev] PropelResultset Iterator Sven Tietje <mail at sven-tietje dot de> Sven Tietje <mail at sven-tietje dot de> 2006-10-04 12:26:37 PDT
                                                     Re: [propel-dev] PropelResultset Iterator Alan Pinstein <apinstein at mac dot com> Alan Pinstein <apinstein at mac dot com> 2006-10-04 12:47:23 PDT
             Re: [propel-dev] PropelResultset Iterator =?ISO-8859-1?Q?David_Z=FClke?= <dz at bitxtender dot com> =?ISO-8859-1?Q?David_Z=FClke?= <dz at bitxtender dot com> 2006-10-04 07:57:22 PDT
                 RE: [propel-dev] PropelResultset Iterator Sven Tietje <tietje at topconcepts dot de> Sven Tietje <tietje at topconcepts dot de> 2006-10-04 08:11:30 PDT
Page: of 2 « Previous | Next »
Messages per page: