(1/3) означает целочисленное деление, поэтому вы не можете получить десятичное значение из этого деления. Для решения этой проблемы используйте:
public static void main(String[] args) {
double g = 1.0 / 3;
System.out.printf("%.2f", g);
}
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!
В основном вместо того, чтобы использовать Zend_Db_Table
используют более общий Zend_Db_Select
или Zend_Db_Statement
для получения данных.
BTW. Вы могли бы хотеть к данным пароля доступа не непосредственно в модели User, а скорее в Вашем Пользовательском классе автора, полученном от Zend_Auth_Adapter
.
Вкратце я создал бы модель для каждой таблицы, не одну модель, это получает доступ ко всем трем. Я был бы тогда определять отношения между таблицами.
, Чтобы быть честным это кажется не очень "DRY" для создания модели для каждой таблицы, но именно это я вижу делавшийся неоднократно в различных примерах онлайн, и это - то, что я сделал в небольшом количестве проектов, которые я создал с Платформой Зенда. Если у кого-либо есть лучший способ обработать это, я надеюсь, что желание отправляет его здесь.
Я сказал бы, что лучший способ сделать это с ZF при помощи Доктрина .
Всего несколько примечаний непосредственно летучая мышь:
первая таблица User, больше походит на таблицу Person, за исключением подлинного метода, но Вы могли поместить это в таблицу User_Password, которая Вы могли, вероятно, переименовать Пользователя. Таблица User_Metadata кажется, что могла просто быть соединена с таблицей User_Password/User.
Теперь, даже без тех изменений, у Вас есть три отличных таблицы с тремя отличными понятиями, если Вы моделируете, каждый из тех отделяются как различные классы и затем имел класс UserModel как своего рода фасад для доступа к каждому, он, вероятно, поможет.