Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Доброго времени суток.
Вопрос, можно ли создавать таблицы в БД в контроллере?
Суть вопроса, необходимо автоматически создавать таблицы БД с произвольным названием, но структура у всех будет одинаковая.
Приблизительно, то что должно получиться:
public function create_table($prefix){
...какая-то логика...
$name_table = $prefix."_table";
$columb1 = "columb1"
...
$columbn = "columbn"
}
Обшарил гугл, но везде описывается примеры использования миграций.
Буду рад любой помощи. Заранее спасибо.
Не в сети
Вопрос снимается.
Оказалось всё очень просто. В контроллере необходимо прописать код, который прописывается в миграциях
if (!Schema::hasTable('blabla')) {
Schema::create('blabla', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('columb1')->comment('Название столбца 1');
$table->string('columb2')->comment('Название столбца 2');
$table->softDeletes()->comment('Дата деактивации');
$table->timestamps();
});
}
и не забыть подключить классы
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
Не в сети
Технически возможно. Но зачем?
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Технически возможно. Но зачем?
У меня на проекте рабочем например, много где создаются временные таблицы(живут пока открыта вкладка браузера) с разного рода данными, которые подготавливают кастомеры и после сейва они уже пишутся куда и как надо. Так что зависит от задач мне кажется)
Не в сети
@Eskono, структура этих таблиц вероятно заранее известна? То есть они всегда одинаковые. Зачем их создавать заново, ведь это довольно дрогая операция. Если надо разделять данные пользователей, достаточно добавить user_id или session_id.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Ну да ошибка в проектировании БД. Такого у mysql или postgre в принципе быть на должно.
На MSSQL есть специальные временные таблицы.
Но как бы правильно делать конечно без создания временных таблиц.
С ув., Алексей
Не в сети
На MSSQL есть специальные временные таблицы.
В MySQL тоже есть временные таблицы (как явно создаваемые через CREATE TEMPORARY TABLE, так и не явно создаваемые для сложных/больших запросов). Другое дело, что временная таблица это все равно таблица со всеми вытекающими (сравнительно медленная; DDL, поэтому нельзя внутри транзакции; требует права доступа помимо базовых SELECT/INSERT/UPDATE/DELETE; и т.д.) и обычно намекает на проблемы в проектировании. К тому же если вы сами создаете временную таблицу, вам придется руками поддерживать ее актуальность, когда изменяется таблица, на основе которой она создана.
Кстати, посмотрите в сторону CREATE VIEW. Возможно, в вашем случае как раз требуется именно это.
Не в сети
Страницы 1