#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 вы можете создавать ассоциации между несколькими моделями. Связывая их вместе, вы можете создать все общие отношения, необходимые для умного и простого сохранения.