Транзакционный PDO с MVC для нескольких моделей - PullRequest
1 голос
/ 16 мая 2011

Я создаю сайт и у меня есть несколько сегментов кода для разных моделей, которые должны выполняться внутри транзакции, поэтому в случае неудачи код будет откатан.зарегистрировать пользователя.

<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> 

В моей системе при создании пользователя мне нужно автоматически поместить его в роль.

Чтобы вставить в таблицу пользователей, я использую свой пользовательмодель.Затем мне нужно вставить таблицу ролей, которая происходит в отдельной модели.Если вся работа, которую необходимо выполнить, находится в отдельных моделях, где я могу создать соединение, которое будет передаваться нескольким моделям, чтобы транзакция работала?

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

Может быть, где я запутался, все ли должно работать, чтобы создать пользователя в моей модели пользователя?Даже если работа охватывает не только таблицу пользовательских БД?Я предполагаю, что каждая таблица в базе данных должна иметь класс модели, и этот класс модели должен работать только внутри этой таблицы?Я не прав?

Спасибо

1 Ответ

0 голосов
/ 16 мая 2011

Как я уже сказал в своем комментарии, внешний слой может взаимодействовать с другими таблицами:

Модель

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

Удачи в обучении, надеюсь, это имеет смысл:)

...