Re: toArray was DB_DataObjects and generating search filters
| From: | Justin Patrin | Date: | Fri, 22 Apr 2005 16:57:05 +0000 |
| Subject: | Re: toArray was DB_DataObjects and generating search filters | ||
| References: | 1 2 3 4 5 6 | Groups: | php.pear.general |
| Request: | Send a blank email to pear-general+get-18922@lists.php.net to get a copy of this message | ||
On 4/21/05, Laszlo Hermann <laszlo.hermann@gmail.com> wrote:
> I've added the following function to my DB_DataObject:
>
> function toArrayList ()
> {
> $list = array();
> while ($this->fetch()) {
> $list[] = $this;
> }
> return $list;
> }
>
> This is pretty useful for me. In the program I just write
>
> $person = DB_DataObject::factory('person');
> $query = "SELECT ... foo ... bar...";
> $person->query($query);
> $smartyRenderer->setAttribute('persons', $person->toArrayList());
This is basically no different than:
$smartyRenderer->setAttribute('persons', $db->getAll($query));
The only thing you're really gaining here (unless you're using the DO
for more than data storage in yoru Smarty Template which I hope you're
not) is the ability to override fetch() to do data manipulation and
such.
In other words, you're *not really using DB_DataObject here*. You're
using it as a wrapper for DB which basically just slows you down.
1) You're not supposed to write SQL with DB_DO. You *may* have to
write snippets and whereAdd or selectAdd, but you shouldn't be writing
the whole SQL.
2) You're meant to use the DB_DO data as you're fetching it. Making
one huge array of DOs is useful sometimes, but in general is just
going to use up lots of memory.
3) If all you're doing is fetching a bunch of records and making them
into arrays you might as well be using DB directly. You're just
including extra overhead by makign DB_DO do what DB already does.
>
> So first you build the dataobject, write the find / get / query, then
> just call toArrayList() then you have a list of the DOs. This works
> for very well for me; however, I would appreciate if the original
> DB_DataObject would have this, written in a more professional way.
>
> Laszlo.
>
>
> On 4/22/05, Justin Patrin <papercrane@gmail.com> wrote:
> > On 4/21/05, Dan Rossi <pear@electroteque.org> wrote:
> > >
> > > On 22/04/2005, at 2:56 AM, Justin Patrin wrote:
> > >
> > > > On 4/20/05, pear@electroteque.org <pear@electroteque.org> wrote:
> > > >> Ok this is how i currently have to setup a method to return an array
> > > >> for
> > > >> list menus as u can see the code is duplicating. toArray returns keys
> > > >> as
> > > >> 0,1,2,3,4,5,6,7 etc ...
> > > >>
> > > >> keys need to be the primary keys :|
> > > >>
> > > >> function getDepartments()
> > > >> {
> > > >> $this->orderBy('department');
> > > >> $this->find();
> > > >> $arr = array();
> > > >> $arr[''] = "";
> > > >> while ($this->fetch()) {
> > > >> $arr[$this->departmentID] = $this->department;
> > > >> }
> > > >> return $arr;
> > > >> }
> > > >>
> > > >
> > > > Did you have a question?
> > > >
> > > > --
> > > >
> > >
> > > LOL yes , is there a more formulated way already without having to
> > > duplicate code ?
> > >
> >
> > Well...I'm not sure what you're asking here. toArray() returns an
> > assoc array of the current record, not a list of records... and it
> > certainly doesn't have numbered indexes.
> >
> > Which code are you supposedly duplicating?
> >
> > --
> > Justin Patrin
--
Justin Patrin