Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 27.11.2019 19:23:59

Создание таблиц БД с помощью кода

Доброго времени суток.
Вопрос, можно ли создавать таблицы в БД в контроллере?
Суть вопроса, необходимо автоматически создавать таблицы БД с произвольным названием, но структура у всех будет одинаковая.

Приблизительно, то что должно получиться:

public function create_table($prefix){
  ...какая-то логика...
  $name_table = $prefix."_table";
  $columb1 = "columb1"

 ...
 $columbn = "columbn"


}

Обшарил гугл, но везде описывается примеры использования миграций.

Буду рад любой помощи. Заранее спасибо.

Не в сети

#2 27.11.2019 20:32:48

Re: Создание таблиц БД с помощью кода

Вопрос снимается.
Оказалось всё очень просто. В контроллере необходимо прописать код, который прописывается в миграциях

        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;

Не в сети

#3 27.11.2019 21:35:59

Re: Создание таблиц БД с помощью кода

Технически возможно. Но зачем?


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#4 28.11.2019 12:28:29

Re: Создание таблиц БД с помощью кода

Технически возможно. Но зачем?

У меня на проекте рабочем например, много где создаются временные таблицы(живут пока открыта вкладка браузера) с разного рода данными, которые подготавливают кастомеры и после сейва они уже пишутся куда и как надо. Так что зависит от задач мне кажется)

Не в сети

#5 30.11.2019 13:01:07

Re: Создание таблиц БД с помощью кода

@Eskono, структура этих таблиц вероятно заранее известна? То есть они всегда одинаковые. Зачем их создавать заново, ведь это довольно дрогая операция. Если надо разделять данные пользователей, достаточно добавить user_id или session_id.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#6 18.12.2019 10:42:40

Alexsaab
Откуда: Москва
Сообщений: 92

Re: Создание таблиц БД с помощью кода

Ну да ошибка в проектировании БД. Такого у mysql или postgre в принципе быть на должно.
На MSSQL есть специальные временные таблицы.
Но как бы правильно делать конечно без создания временных таблиц.

С ув., Алексей

Не в сети

#7 21.12.2019 15:41:38

Re: Создание таблиц БД с помощью кода

На MSSQL есть специальные временные таблицы.

В MySQL тоже есть временные таблицы (как явно создаваемые через CREATE TEMPORARY TABLE, так и не явно создаваемые для сложных/больших запросов). Другое дело, что временная таблица это все равно таблица со всеми вытекающими (сравнительно медленная; DDL, поэтому нельзя внутри транзакции; требует права доступа помимо базовых SELECT/INSERT/UPDATE/DELETE; и т.д.) и обычно намекает на проблемы в проектировании. К тому же если вы сами создаете временную таблицу, вам придется руками поддерживать ее актуальность, когда изменяется таблица, на основе которой она создана.

Кстати, посмотрите в сторону CREATE VIEW. Возможно, в вашем случае как раз требуется именно это.

Не в сети

Подвал раздела