Re: new package DB_Abstract/Easy/DataBuilder/DataGetter/?
| From: | Wolfram Kriesing | Date: | Wed, 15 Jan 2003 14:03:38 +0000 |
| Subject: | Re: new package DB_Abstract/Easy/DataBuilder/DataGetter/? | ||
| Groups: | php.pear.dev | ||
| Request: | Send a blank email to pear-dev+get-12466@lists.php.net to get a copy of this message | ||
anymore +/-1 ?
or topic dropped?
wolfram
-------- Original Message --------
Subject: [PEAR-DEV] new package DB_Abstract/Easy/DataBuilder/DataGetter/?
Date: Tue, 14 Jan 2003 15:33:36 +0100
From: Wolfram Kriesing <wolfram@visionp.de>
To: pear-dev@lists.php.net
for about almost a year now we are continuosly improving our package,
which we decided to contribute to pear now.
the package itself is based on PEAR::DB (optional MDB, would be minor
change) and it is a bit like the DB_DataObject
- only that the data are not really inside objects and
- that the query-building is more flexible, i believe.
- actually it is a query-builder and executer ...
we are building our applications always with this class and since then
(i dont remember that) we have written a single SQL-Query by hand, so
it seems quite flexible
currently the class name is vp_DB, i thought it might be named
DB_Abstract/Easy/DataBuilder/DataGetter/???? (even though i think better
names could be found)
the class is capable of, manipulating the entire query incl
- where
- joins, left and right joins
- group
- order
and many more things
methods are: get, getAll, getMultiple, update, save, add, remove,
getCount, setWhere, addWhere, getWhere, setJoin, addJoin, setLeftJoin,
addLeftJoin, setGroup, getGroup, setOrder, getOrder, setIndex,
getIndex, setSelect, getSelect and some more i guess ...
short examples might demostrate some of what it does
require_once 'vp/DB.php';
class contact extends vp_DB {
var $table = 'contact';
var $primaryCol = 'id';
}
$contact = new contact();
(1)
// get the contact with the id=7
$data = $contact->get(7);(2) // reset all internal settings $contact->reset();
$contact->setWhere('name="Wolfram"');
$contact->setOrder('name');
// get the first 10 (LIMIT 0,10)
$contacts = $contact->getAll(0,10);
(3)
// reset all internal settings
$contact->reset();
$contact->addWhereSearch('name','Wolfram Kriesing');
$contacts = $contact->getAll(0,10);
(4)
// reset all internal settings
$contact->reset();
$contact->addWhereSearch('name','Wolfram Kriesing');
// select only the columns 'name' and 'surname'
$contact->setSelect('name,surname');
$contact->setGroup('name'); // group by 'name'
// the number of contacts
$numContacts = $contact->getCount();
$contacts = $contact->getAll(0,10);
JOINS
(5)
// join the table 'user'
// using the condition 'user.id=contact.user_id'
$contact->reset();
$contact->setJoin('user','user.id=contact.user_id');
$contacts = $contact->getAll(0,10);
(6)
// the same as above, just that the class
// knows itself how to join the tables,
// by using a regular expression
$contact->reset();
$contact->autoJoin('user');
$contacts = $contact->getAll(0,10);
the queries would be:
(1)
SELECT * FROM contact WHERE id=7
(2)
SELECT * FROM contact WHERE name="Wolfram" LIMIT 0,10
(3)
SELECT * FROM contact WHERE name LIKE "%Wolfram%Kriesing%" LIMIT 0,10
(4)
getCount:
SELECT count(*) FROM contact WHERE name LIKE "%Wolfram%Kriesing%"
GROUP BY name LIMIT 0,10
getAll:
SELECT name,surname FROM contact WHERE name LIKE "%Wolfram%Kriesing%"
GROUP BY name LIMIT 0,10
(5) (6)
SELECT * FROM contact,user WHERE user.id=contact.user_id
code is here, needs minor modification before it goes into pear
http://os.visionp.de/tmp/vp_DB/Common.php.txt
--
Wolfram
... opensource @ vision:produktion ...
http://opensource.visionp.de
... translating template engine ....
http://sf.net/projects/simpletpl
... authentication system ....
http://sf.net/projects/auth
--
PEAR Development Mailing List (http://pear.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
--
Wolfram
... opensource @ vision:produktion ...
http://opensource.visionp.de
... translating template engine ....
http://sf.net/projects/simpletpl
... authentication system ....
http://sf.net/projects/auth