I need to insert the record in the usuarios table, then in the personas table using the foreign key id_usuario and finally insert the record in the usuarios_roles table using the foreign key id_usuario as well. I am working with PHP Fat Free Framework.
This is my form to register a persona in my view record.html (please ignore blank inputs):
<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>
I must follow this relational model that connects the table personas with the table usuarios and in turn usuarios_roles. Primary keys are all self-incremental: (
Relational MySQL Model)
Now comes the part that I don't understand how to program. At the time of doing the save() I can register a user, but when I do the save() of persona obviously it will not be linked to the id_usuario and there will not be an INSERT in the table usuarios_roles. Currently I receive the information in my index.php specifically here:
$f3->route('POST @registroEmpresa: /registroEmpresa',
function($f3) {
$db = getConnection();
$usuario = new DB\SQL\Mapper($db, 'usuarios');
$usuario->copyFrom('POST');
$usuario->save(); //insert new usuario row
$persona = new DB\SQL\Mapper($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');
});
Do you have any PHP fat-free code or idea that can serve me for this purpose, without using updates, inserts, or SQL queries? Thanks
What you might be after is available in a plugin called
f3-cortex. In there, there's a specific section about relations that may be of benefit to what you're trying to accomplish. https://github.com/ikkez/f3-cortex#relations There are 1:1, 1:many, many:many relationships that you can set up that will take care of what you need.