Zend_Db, как работать со связанными таблицами?

Хочу до конца научиться работать со связанными таблицами в ZF. (1) Кто-нибудь может с этим помочь? есть 2 таблицы users и * users_openid * со ссылкой на многие. Я хотел бы реализовать связь между таблицами в Zend_Db, чтобы такие пользователи, взяв его openid на Drugs findDependentRowset, добавили openid, openid, чтобы провести пользователя через findParentRow ...

Пособие - это ПОМОЩЬ на русском языке ... но не похоже, что я не могу с этим справиться .... (http://framework.zend.com/manual/en/zend.db.table.relationships.html

Структура базы данных:

- 
- Table structure `users` 
- 

CREATE TABLE IF NOT EXISTS `users` ( 
`Id` int (11) UNSIGNED NOT NULL AUTO_INCREMENT, 
`Nickname` varchar (200) NOT NULL, 
`Email` varchar (200) NOT NULL DEFAULT'', 
`Active` tinyint (1) NOT NULL DEFAULT '0 ', 
`Enabled` tinyint (1) NOT NULL DEFAULT '0 ', 
PRIMARY KEY (`id`) 
) ENGINE = InnoDB DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1; 

- ------------------------------------------------ -------- 

- 
- Table structure `users_openid` 
- 

CREATE TABLE IF NOT EXISTS `users_openid` ( 
`User_id` int (11) UNSIGNED NOT NULL, 
`Openid` varchar (200) NOT NULL, 
PRIMARY KEY (`user_id`), 
KEY `openid` (`openid`) 
) ENGINE = InnoDB DEFAULT CHARSET = utf8;

PS еще один небольшой подвопросик (2), с помощью которого вы создаете подключение к MySQL (ubuntu), в инструментах есть phpmyadmin и mysql administrator, но там я не нашел как это сделать, а вот sql (


person ErgallM    schedule 13.10.2010    source источник
comment
Вы спрашиваете, как использовать Zend ORM? Doctrine ORM также доступна вам.   -  person Andrew Sledge    schedule 13.10.2010
comment
да с Zend omr. Я не знаю доктрины   -  person ErgallM    schedule 13.10.2010


Ответы (1)


Чтобы ответить на ваш вопрос, как создать соединение с базой данных?

Я знаю 2 способа подключения к базе данных с помощью Zend.

  • Настройте db-adapter, используя zf, а затем извлеките ресурс db

<?php

// Initialize and retrieve DB resource
$bootstrap = $application->getBootstrap();
$bootstrap->bootstrap('db');
$dbAdapter = $bootstrap->getResource('db');
?>

<?php

// Get DB resource
//   You can also use Zend_Db_Adapter_Pdo_Mysql
$db = Zend_Db::factory('PDO_MYSQL', array(
            'host' => 'localhost',
            'username' => 'user',
            'password' => 'password',
            'dbname' => 'database'
        ));
?>

В вашем SQL у вас нет никаких ссылок из одной таблицы в другую ... И ссылка мнимая? В любом случае...

<?php
class Users extends Zend_Db_Table_Abstract
{
    protected $_name            = 'users';

    //
    //protected $_dependentTables = array('UsersOpenids');
}

class UsersOpenids extends Zend_Db_Table_Abstract
{
    protected $_name            = 'users_openid';

    protected $_referenceMap    = array(
        'User' => array(
            'columns'           => 'User_id',
            'refTableClass'     => 'Users',
            'refColumns'        => 'Id'
        )
    );
}


//
$openIdsTable = new UsersOpenids();

//  Get only 1st Row
$openId = '[email protected]';
$openIdRow = $openIdsTable->fetchRow(array('Openid = ?' => $openId));

if ($openIdRow === null){
    throw new Exception("OpenId is not found");
}else{

//  Find parent row, will use current value of Zend_Db_Table_Row_Abstract
//  Will get user who is associated with the open id
//  $openIdRow->findParentRow($parentTable, $ruleKey, $select)
$user = $openIdRow->findParentRow('Users', 'User');

}
?>

Или посмотрите документацию Zend по созданию выборок. Вы можете создать выборку в своей модели и загрузить данные.

ИДАЧИ

person Alex    schedule 13.10.2010