Моделирование объектов с несколькими связями между таблицами в Платформе Зенда

(1/3) означает целочисленное деление, поэтому вы не можете получить десятичное значение из этого деления. Для решения этой проблемы используйте:

public static void main(String[] args) {
        double g = 1.0 / 3;
        System.out.printf("%.2f", g);
    }
20
задан Andy Baird 21 March 2009 в 23:05
поделиться

5 ответов

class Users extends Zend_Db_Table_Abstract
{
    protected $_name = 'users';
    protected $_rowClass = 'User';
    protected $_dependentTables = array ('UserMetadata', 'UserPassword');

...

class UserMetadata extends Zend_Db_Table_Abstract
{
    protected $_name = 'user_metadata';
    protected $_referenceMap = array (
    'Users'=> array (
    'columns'=>'user_id',
    'refTableClass'=>'Users',
    'refColumns'=>'id'
    )
    );

...

class UserPassword extends Zend_Db_Table_Abstract
{
    protected $_name = 'user_password';
    protected $_referenceMap = array (
    'Users'=> array (
    'columns'=>'user_id',
    'refTableClass'=>'Users',
    'refColumns'=>'id'
    )
    );

Выбирающие данные:

$id = //get your user id from somewhere

$users = new Users();
$user = $users->fetchRow('id=?', $id);
if ($user->authMethod == 0)
{
    $metadata = $user->findDependentRowset('UserMetadata')->current();
}

или

$user = $users->fetchRow($users->select()
              ->where('gender=?, 'M')
              ->order('email ASC');

... и т.д.

Вставка данных:

$newRow = $users->fetchNew();
$newRow->email = me@domain.com;
$newRow->save();

или

$users = new Users();
$data = array('email'     => 'me@domain.com',
              'firstname' => 'Me');
$users->insert($data);

Обновление:

$user->email = 'me@domain.org';
$user->save();

Удаление строки:

$user->delete();

Используя транзакцию:

$db->beginTransaction();
$db->commit();
$db->rollback();

и т.д.... это - все в Руководстве ZF!

23
ответ дан 30 November 2019 в 00:48
поделиться

В основном вместо того, чтобы использовать Zend_Db_Table используют более общий Zend_Db_Select или Zend_Db_Statement для получения данных.

BTW. Вы могли бы хотеть к данным пароля доступа не непосредственно в модели User, а скорее в Вашем Пользовательском классе автора, полученном от Zend_Auth_Adapter.

2
ответ дан 30 November 2019 в 00:48
поделиться

Вкратце я создал бы модель для каждой таблицы, не одну модель, это получает доступ ко всем трем. Я был бы тогда определять отношения между таблицами.

, Чтобы быть честным это кажется не очень "DRY" для создания модели для каждой таблицы, но именно это я вижу делавшийся неоднократно в различных примерах онлайн, и это - то, что я сделал в небольшом количестве проектов, которые я создал с Платформой Зенда. Если у кого-либо есть лучший способ обработать это, я надеюсь, что желание отправляет его здесь.

2
ответ дан 30 November 2019 в 00:48
поделиться

Я сказал бы, что лучший способ сделать это с ZF при помощи Доктрина .

0
ответ дан 30 November 2019 в 00:48
поделиться

Всего несколько примечаний непосредственно летучая мышь:

первая таблица User, больше походит на таблицу Person, за исключением подлинного метода, но Вы могли поместить это в таблицу User_Password, которая Вы могли, вероятно, переименовать Пользователя. Таблица User_Metadata кажется, что могла просто быть соединена с таблицей User_Password/User.

Теперь, даже без тех изменений, у Вас есть три отличных таблицы с тремя отличными понятиями, если Вы моделируете, каждый из тех отделяются как различные классы и затем имел класс UserModel как своего рода фасад для доступа к каждому, он, вероятно, поможет.

0
ответ дан 30 November 2019 в 00:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: