Платформа зенда: Надлежащий способ взаимодействовать с базой данных?

Обычно вы определяете схемы в mongoose, так что вы, вероятно, определяете их где-то так:

var Bookings = mongoose.model('Bookings', bookingSchema);

Теперь вы можете просто вызвать свой код с классом в качестве параметра вместо строки:

[111 ]

И вы getRecord должны работать с вашим кодом.

Почему лучше использовать переменные / классы вместо строк? При непосредственном использовании переменных ваша IDE будет отображать ошибку, если вы допустите ошибку в имени переменной, этого не произойдет, если вы просто передадите строку и сделаете там опечатку.

10
задан Gilean 15 January 2009 в 03:27
поделиться

3 ответа

Используя Zend_Db Вы, вероятно, не хотите входить в детали подготовленных операторов и т.п.. Вы просто хотите использовать объекты модели, чтобы сделать основной CRUD (Создайте, Чтение, Обновление и Удалите). Я знаю, что Руководство Справочника программиста обширно, но это - большое введение в Zend_Db. Можно хотеть более тщательно изучить документацию Zend_Db_Table.

Но дать быстрый ответ на Ваш вопрос. Если Вы не должны переопределять некоторое поведение по умолчанию, Вы не должны должны быть расширять Zend_Db_Table_Row_Abstract. Также можно, вероятно, упростить Пользовательский класс, чтобы просто быть:

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

  // Code here
}

Затем для использования его Вы сделали бы некоторые вещи, Вы упомянули, что использовали следующее:

//Create a Users Model Object
$usersDb = new Users();

//Find the record with user_id = 4 and print out their name
$row = $usersDb->find(4);
echo $row->first_name . ' ' . $row->last_name

//Change the first name of this user to Brian    
$row->first_name = 'Brian';
$row->update();

//Insert a user into the database
$data = array(
  'first_name' => 'Gilean',
  'last_name' => 'Smith');
$usersDb->insert($data);

//Retrieve all users with the last name smith and print out their full names
$rows = $usersDb->fetchAll($usersDb->select()->where('last_name = ?', 'smith'));    
foreach ($rows as $row) {
  echo $row->first_name . ' ' . $row->last_name
}
8
ответ дан 3 December 2019 в 18:36
поделиться

В целом люди предпочитают получать доступ к базе данных через Объекты таблицы и Объекты строки, соответствовать их привычкам к объектно-ориентированному программированию.

Подход OO полезен, если необходимо написать код, чтобы преобразовать или проверить вводы или выводы запроса. Можно также записать пользовательские методы в Таблице или классе строки для инкапсуляции часто необходимых запросов.

Но объектно-ориентированный интерфейс упрощен, не мог выполнить все типы операций базы данных, которые Вы, возможно, должны были бы сделать. Таким образом, можно пахать глубже и выполнить SQL-запрос против методов Zend_Db_Adapter как query() и fetchAll() когда Вы требуете более прекрасного управления своим SQL.

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

Это - очень общий ответ на Ваш очень общий вопрос.

9
ответ дан 3 December 2019 в 18:36
поделиться

Я рекомендую использовать метод сохранения.

//Create a Users Model Object
$usersDb = new Users();

//Find the record with user_id = 4 and print out their name
$row = $usersDb->find(4);
echo $row->first_name . ' ' . $row->last_name

//Change the first name of this user to Brian    
$row->first_name = 'Brian';
$row->save();

//Insert a user into the database
$newUser = $usersDb->fetchNew();
$newUser->first_name = 'Gilean';
$newuser->last_name  = 'Smith';
$newUser->save();

// OR if you get your data from post or any array
$newUser = $usersDb->fetchNew();
$newUser->setFromArray($data_from_post);
$newUser->save();

причина, почему мне нравится этот подход больше, состоит в том, потому что это, почему у Вас всегда есть экземпляр пользовательской модели и у Вас могут быть пользовательские методы в них (исключая isAdmin) и также потому что Вы могли бы хотеть к ovewrite, чтобы сохранить/вставить/обновить функция на userRow сделала что-то, прежде чем они будут вставлены/обновлены.

4
ответ дан 3 December 2019 в 18:36
поделиться
Другие вопросы по тегам:

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