Home > Zend_Db > Creating DAO with Zend_Db_Table

Creating DAO with Zend_Db_Table

intro
This article illustrates how to create DAO with Zend_Db_Table. This simplifies the action method of controller, so you can easily read and maintain the source code. You can download the source code of this article from here.

1.Create bootstrap.php and config.ini
Create the file application/bootstrap.php with the following content.

<?php
set_include_path('../library' . PATH_SEPARATOR . get_include_path());
define('APP_BASE', '../application');
define('CONFIG_PATH', APP_BASE . '/config.ini');
 
require_once 'Zend/Controller/Front.php';
require_once 'Zend/Layout.php';
require_once 'Zend/Db.php';
require_once 'Zend/Config/Ini.php';
require_once 'Zend/Db/Table/Abstract.php';
 
$layout = Zend_Layout::startMvc();
//$layout->getView()->baseUrl = '/yourBaseUrl';
 
$config = new Zend_Config_Ini(CONFIG_PATH, 'staging');
$params = $config->database->params->toArray();
$params['options'][Zend_Db::CASE_FOLDING] = Zend_Db::CASE_LOWER;
$dbAdapter = Zend_Db::factory($config->database->adapter, $params);
Zend_Db_Table_Abstract::setDefaultAdapter($dbAdapter);
 
Zend_Controller_Front::run(APP_BASE . '/controllers');

Create the file application/config.ini with the following content.
Please modify database.params.* properly.

[staging]
database.adapter         = pdo_mysql
database.params.host     = localhost
database.params.username = db_user
database.params.password = db_password
database.params.dbname   = db_name

In this article, we will use the following sql.

CREATE TABLE profiles
(
    id integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    user_id integer         NOT NULL,
    first_name varchar(100) NOT NULL,
    last_name varchar(100)  NOT NULL,
    email varchar(200)      NOT NULL,
    url varchar(200)        NOT NULL
);
 
INSERT INTO profiles (user_id, first_name, last_name, email, url)
    VALUES (1, 'Myfirstname', 'Mylastname', 'my@emailaddress',
        'http://myurl/my/page');
2.Create DAO with Zend_Db_Table
Create the file application/models/Profiles.php with the following content.

<?php
require_once 'Zend/Db/Table/Abstract.php';
 
class Profiles extends Zend_Db_Table_Abstract
{
    protected $_name = 'profiles';
 
    public function findByUserId($user_id)
    {
        $select = $this->select()->where('user_id = ?', $user_id);
        return $this->fetchAll($select);
    }
}
3.Create Controller
Create the file application/constorllers/IndexController.php with the following content.

<?php
require_once 'Zend/Controller/Action.php';
require_once APP_BASE . '/models/Profiles.php';
 
class IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
        $profiles = new Profiles();
        $row =$profiles->findByUserId(1)->current();
        if ($row)
        {
            $this->view->profile = $row->toArray();
        }
    }
}
4.Create View
Create the file application/views/scripts/index/index.phtml with the following content.

 
<h1><?= $this->translate('Your Profile') ?></h1>
 
<?php if (!$this->profile) : ?>
<span><?= $this->translate('No Profile Found') ?></span>
<?php else : ?>
<dl>
<?php foreach($this->profile as $key => $value) : ?>
<dt><?= $this->translate($key) ?></dt>
<dd><?= $this->escape($value) ?></dd>
 
<?php endforeach; ?>
</dl>
 
<?php endif; ?>
5.Check
Let's access the Web Server and check the screen.

References
The following is about implementing the method findBy{field} using magic method.(Only Japanese, but maybe you can read the source code...)

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://www.oplabo.com/article/18/trackback
Listed below are links to weblogs that reference
Creating DAO with Zend_Db_Table from Open Programming Laboratory

Home > Zend_Db > Creating DAO with Zend_Db_Table

Japanese
Search
Feeds

Return to page top