не уверен, что в последнее время я задаю слишком много вопросов о стековом потоке, но я чувствую, что документация Zend Framework ужасна. Кажется, что примеры очень расплывчаты и не похожи на то, что используется в реальном мире. Они поощряют использование фреймворка для аккуратного и организованного кода, а затем не упоминают, как ему следует следовать: D
Так или иначе! В старом приложении, которое я сейчас перевожу на Zend, у меня была бы функция с именем register, например:
function register($username, $password, $email, $etc) {
// Do stuff
// Insert $email and other stuff into `user_profile` table
// Insert $username and $password into the `user` table
}
Но теперь с Zend ... Я следовал их учебному пособию по Гостевой книге, чтобы начать, и у меня есть следующие модели: User
, UserMapper
.
И у меня есть DbTables для каждой таблицы в моей базе данных, например: User
, UserProfile
.
Так что мне нравится функциональность, когда вы регистрируетесь, вы создаете объект User и затем вызываете save
в маппере, который записывает объект в базу данных, но дело в том, что некоторые из этих пользовательских частей переходят в профиль пользователя Таблица. Пример приложения гостевой книги состоит в том, что в UserMapper вы просто извлекаете одну таблицу (User) и пишете в нее ... ну, я имею в виду, что я мог бы просто сделать что-то вроде:
// Insert or Update data to user table
$this->getDbTable()->insert($user_data);
// Insert or Update User Profile data
$this->setDbTable('UserProfile');
$this->getDbTable()->insert($user_profile);
Но это кажется немного .. хакерским. Каков реальный рекомендуемый способ работы с несколькими таблицами?
Кроме того, если у меня есть пользовательские запросы ... я должен поместить их в созданный класс DbTable
или в класс UserMapper
? Я на самом деле не вижу, для чего на самом деле расширяется DbTable. Все, что говорится в руководстве, - это делать, и в действительности это не объясняет преимущества / причины / использование того, почему вы это делаете.
Спасибо, Дом