I'm building a site and have multiple segments of code, across multiple models, that needs to run within a transaction so if one fails, the code will roll back.
Say I have a simple form to register a user.
<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"开发者_如何学JAVA id="email" />
</div>
<div><input type="submit" name="submit" value="submit" /></div>
</form>
In my system when a user is created, I need to automatically place them in a role.
To insert into the User table, I use my User model. Then I need to insert the Role table which occurs in a separate model. If all work needed to be done lies within separate models, where do I create the connection to be passed across multiple models to allow the transaction to work?
// Start Transaction.
// Create new user based on posted variables. UserModel
// Add user to a given role. UserRoleModel -> Table contains UserId and RoleId
// Commit transaction.
Maybe where I am confused is, should all work to create a user be in my user model? Even if the work spans across more than just the User db table? My assumption is that each table in the database should have a model class and that model class should do only work within that table? Am I wrong?
Thanks
As i said in my comment, the outer layer can interact with other tables:
Model
1 DataBase
2 => UserTableDefinition
3 => UserDefaultInteraction
4 => UserCustomFunctions
5 => UserOuterLayer
And the User Role can be set up the same way. Now the all the models can interact with each other only using the outerlayer (5);
since you are learning, i will give yuou a detailed example so you can consider using a robust way of handling your model, and this simply make it easier. example:
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();
}
}
}
Good Luck in your learning, i hope this makes sense :)
精彩评论