Проблема при попытке вставить записи с внешними ключами в php fat free framework и mysql

#php #html #mysql #post #fat-free-framework

#php #HTML #mysql #Публикация #fat-free-framework

Вопрос:

Мне нужно вставить запись в usuarios таблицу, затем в personas таблицу, используя внешний ключ id_usuario , и, наконец, вставить запись в usuarios_roles таблицу id_usuario , также используя внешний ключ. Я работаю с PHP Fat Free Framework. Это моя форма для регистрации персоны, на мой взгляд record.html (пожалуйста, игнорируйте пустые входные данные):

 <form action="registroEmpresa" method="post">
    <input type="text" class="form-control" name="rut" />
    <input type="text" class="form-control" name="nombre_razonsocial" />
    <input type="text" class="form-control" name="telefono" />
    <input type="email" class="form-control" name="email" />
    <input type="password" class="form-control" name="password" />
    <?php $empty = ' '; ?>
    <input id="" name="apellidos" type="hidden" value="<?php echo $empty; ?>">
    <input id="" name="direccion" type="hidden" value="<?php echo $empty; ?>">
    <input id="" name="pais" type="hidden" value="<?php echo $empty; ?>">
    <input id="" name="region" type="hidden" value="<?php echo $empty; ?>">
    <input id="" name="ciudad" type="hidden" value="<?php echo $empty; ?>">
     <input id="" name="comuna" type="hidden" value="<?php echo $empty; ?>">
    <button type="submit">Registrarme</button>
</form>
 

Я должен следовать этой реляционной модели, которая соединяет таблицу personas с таблицей usuarios и, в свою очередь usuarios_roles . Все первичные ключи являются самоинкрементными: (
Реляционная модель MySQL)

Теперь начинается та часть, которую я не понимаю, как программировать. Во время выполнения save() я могу зарегистрировать пользователя, но когда я делаю save() из persona, очевидно, что он не будет связан с id_usuario и не будет INSERT в таблице usuarios_roles . В настоящее время я получаю информацию в моем index.php конкретно здесь:

 $f3->route('POST @registroEmpresa: /registroEmpresa',
function($f3) {
    $db = getConnection(); 

    $usuario = new DBSQLMapper($db, 'usuarios'); 
    $usuario->copyFrom('POST');
    $usuario->save();   //insert new usuario row    
    
    $persona = new DBSQLMapper($db, 'personas'); 
    $persona->copyFrom('POST');
    $persona->save();   //insert new persona row (without foreign key ;C  )   

    //get credentials
    $email = $f3->get('POST.email');
    $password = $f3->get('POST.password'); 

    //bad practices to add "id_usuario" to personas table
    $db->exec("UPDATE `personas` 
               SET `id_usuario` = (SELECT `id_usuario` FROM `usuarios`
                                    WHERE `email` = '$email' and `password` = '$password')
               ORDER BY `id_persona` DESC
               LIMIT 1"); 

    //bad practices to add "id_usuario" to usuarios_roles table
    $db->exec("INSERT INTO `usuarios_roles`(`id_usuario`, `id_rol`) VALUES
             (( SELECT `id_usuario` FROM `usuarios`
                WHERE `email` = '$email' and `password` = '$password'ORDER BY `id_usuario` DESC
               LIMIT 1),5)"); 

    echo View::instance()->render('login.html');
});
 

Есть ли у вас какой-либо PHP fat-free код или идея, которые могут служить мне для этой цели, без использования обновлений, вставок или SQL-запросов? Спасибо

Ответ №1:

То, что вам может понадобиться, доступно в плагине под названием f3-cortex . Там есть специальный раздел об отношениях, которые могут быть полезны для того, чего вы пытаетесь достичь. https://github.com/ikkez/f3-cortex#relations Вы можете установить отношения 1: 1, 1: много, много: много, которые позаботятся о том, что вам нужно.

С помощью Cortex вы можете создавать ассоциации между несколькими моделями. Связывая их вместе, вы можете создать все общие отношения, необходимые для умного и простого сохранения.