2018-07-13 09:30:55
Last edited by tengfei on 2019-09-16 14:11:37

1.  About DAO

zentaoPHP is not trying to implement ORM or ActiveRecord, because we believe that a framework should leave enough space for developers to play freely rather than do it all. Therefore, a simple and convenient DAO is provided in the framework. When we encapsulate DAO, we try to make it compatible with standard SQL writing.

The definitions of DAP are in lib/dao.class.php. When zentaoPHP is loaded, the $this->dao object is automatically generated, and $this->dao can be used directly in the code of control, model, or view to perform a variety of methods.

2. exec()

If it is a query statement, you need to use the fetch method to return data. Use the exec () method to update, delete, replace or so.

After executing DAO, you can use

fetch():         fetch the first record that meets the condition and return the format
fetch($filed):  fetch the value of $feild that meets the condition firstly
fetchAll():     fetch all records that meet the requirement and return in arrays with 0-n as index
fetchAll($key):  fetch all records that meet the condition and use $key as index
fetchPairs($key, $value): return the list of key-value pairs. If no parameter is specified, the first field returned is taken as key, the second as value.
fetchGroup($group, $key): group all records that meet the condition according to $group. For example, group all $status=active

3. Instruction

For the convenience of writing, DAO class encapsulates several operators:

eq: equal,
ne: not equal,
gt: greater than, 
lt: less than, 
in: in a list
between: between
notin:not in a list
like: fuzzy match

4. Query

Common query: search account=wwccss


More complicated one query. Add andWhere (or orWhere)

->orderBy('id desc')

Left join query

$this->dao->select('t1.*, t2.*')->from('user')->alias('t1')->leftJoin('userGroup')->alias('t2')->on('t1.account = t2.account')->fetchAll();


$this->dao->findByAccount($account)->from('user')->fetch();               // a magic method, query by account
$this->dao->select('*')->from('user')->fetchAll('account');              // set account returned as key 
$this->dao->select('account, realname')->from('user')->fetchPairs();     // return the key-value pairs of account=>realname
$this->dao->select('class, account, realname')->from('user')->fetchGroup('class');     // group by class

Assemble SQL according to conditions: beginIF, FI()

$this->dao->select('*')->from('user')->where('id')->gt(10)->beginIF($class == 'online')->andWhere('status')->eq('online')->fi()->fetchAll();


Use a data object to update. The key of the data object corresponds to the field name in the data table.

$user->account = 'wwccss';
$user->password = '123456';

Or update one by one


Echo the ID of the last inserted

echo $this->dao->lastInsertID();


It is similar to insert. Use a data object or a field to update.

$user->name = 'wwccss';
$user->age = 10;


A data object has to be defined for REPLACE too. Then call REPLACE. Note: make sure that the table has a major key or a unique index.




Write a Comment
Comment will be posted after it is reviewed.