PDO transaccional con MVC en múltiples modelos

Estoy construyendo un sitio y tengo varios segmentos de código, en varios modelos, que deben ejecutarse dentro de una transacción, de modo que si uno falla, el código se retrotraerá.

Digamos que tengo un formulario simple para registrar un usuario.

En mi sistema cuando se crea un usuario, necesito ubicarlos automáticamente en un rol.

Para insertar en la tabla de usuario, uso mi modelo de usuario. Entonces necesito insertar la tabla de roles que se produce en un modelo separado. Si todo el trabajo que se debe hacer se encuentra dentro de modelos separados, ¿dónde creo que la conexión se transmita a través de múltiples modelos para permitir que la transacción funcione?

 // Start Transaction. // Create new user based on posted variables. UserModel // Add user to a given role. UserRoleModel -> Table contains UserId and RoleId // Commit transaction. 

Tal vez estoy confundido, ¿deberían funcionar todos para crear un usuario en mi modelo de usuario? Incluso si el trabajo abarca más que solo la tabla db del usuario? ¿Mi suposición es que cada tabla en la base de datos debería tener una clase modelo y que la clase modelo debería funcionar solo dentro de esa tabla? ¿Me equivoco?

Gracias

Como dije en mi comentario, la capa externa puede interactuar con otras tablas:

Modelo

  1 DataBase 2 => UserTableDefinition 3 => UserDefaultInteraction 4 => UserCustomFunctions 5 => UserOuterLayer 

Y la función de usuario se puede configurar de la misma manera. Ahora todos los modelos pueden interactuar entre ellos solo usando la capa externa (5);

ya que estás aprendiendo, te daré un ejemplo detallado para que puedas considerar usar una forma robusta de manejar tu modelo, y esto simplemente lo hace más fácil. ejemplo:

 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(); } } } 

Buena suerte en tu aprendizaje, espero que esto tenga sentido 🙂