Я создаю сайт и имею несколько сегментов кода на нескольких моделях, которые должны выполняться внутри транзакции, поэтому, если один из них не работает, код будет откат.
Скажем, у меня простая форма регистрации пользователя.
<form action="/register" method="POST"> <div> <label for="username">Username</label> <input type="text" name="username" id="username" /> </div> <div> <label for="username">Password</label> <input type="password" name="password" id="password" /> </div> <div> <label for="username">Email</label> <input type="text" name="email" id="email" /> </div> <div><input type="submit" name="submit" value="submit" /></div> </form>
В моей системе, когда пользователь создан, мне нужно автоматически разместить их в роли.
Чтобы вставить в таблицу User, я использую мою модель User. Затем мне нужно вставить таблицу ролей, которая встречается в отдельной модели. Если все работы, которые необходимо выполнить, находятся в отдельных моделях, где я могу создать соединение, которое будет передаваться через несколько моделей, чтобы транзакция могла работать?
// Start Transaction. // Create new user based on posted variables. UserModel // Add user to a given role. UserRoleModel -> Table contains UserId and RoleId // Commit transaction.
Может быть, там, где я запутался, все должно работать, чтобы создать пользователя в моей модели пользователя? Даже если работа охватывает не только таблицу пользователя db? Мое предположение заключается в том, что каждая таблица в базе данных должна иметь модельный класс и класс модели должен работать только в этой таблице? Я ошибаюсь?
благодаря
Как я уже сказал в своем комментарии, внешний слой может взаимодействовать с другими таблицами:
Модель
1 DataBase 2 => UserTableDefinition 3 => UserDefaultInteraction 4 => UserCustomFunctions 5 => UserOuterLayer
И роль пользователя может быть настроена одинаково. Теперь все модели могут взаимодействовать друг с другом только с помощью внешнего слоя (5);
так как вы учитесь, я дам вам подробный пример, чтобы вы могли использовать надежный способ обработки своей модели, и это упростит. пример:
class UserOuterLayer extends UserCustomFunctions { public function createNewUser ($data) { // create a new user from array $user = new self(); $user->setName($data['name']); $user->setUserName($data['username']); $user->setPassword($data['password']); $user->setRole($data['role']); if ($user->save()) { // when the object is saved it assign a new value for $user->id $role = new UserRole(); // accessing another model $role->setUserId($user->getId()); // returns the new id from the saved object $role->setRole($user->getRole()); $role->save(); } } }
Удачи в вашем обучении, я надеюсь, что это имеет смысл 🙂