Laravel 5.6: создать базу данных и несколько схем

Я хочу создать базу данных с помощью команды. Я использую postgresql. Я создаю таблицы, используя миграции, но перед этим я хочу создать базу данных и несколько схем.

Я использую эту команду:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;

class pgsql extends Command
{
/**
 * The name and signature of the console command.
 *
 * @var string
 */
protected $signature = 'pgsql:createdb {name?}';

/**
 * The console command description.
 *
 * @var string
 */
protected $description = 'Create a new pgsql database schema based on the database config file';

/**
 * Create a new command instance.
 *
 * @return void
 */
public function __construct()
{
    parent::__construct();
}

/**
 * Execute the console command.
 *
 * @return mixed
 */
public function handle()
{
    $dbname = env('DB_DATABASE');
    $dbuser = env('DB_USERNAME');
    $dbpass = env('DB_PASSWORD');
    $dbhost = env('DB_HOST');

    try {
                $db = new \PDO("pgsql:host=$dbhost", $dbuser, $dbpass);
                $test = $db->exec("CREATE DATABASE \"$dbname\" WITH TEMPLATE = template0 encoding = 'UTF8' lc_collate='Spanish_Spain.1252' lc_ctype='Spanish_Spain.1252';");
                if ($test === false)
                    throw new \Exception($db->errorInfo()[2]);
                $this->info(sprintf('Successfully created %s database', $dbname));
    }
    catch (\Exception $exception) {
                $this->error(sprintf('Failed to create %s database: %s', $dbname, $exception->getMessage()));
    }

}
}

Я использую: php artisan pgsql:createdb schema_name

Но я получаю такую ​​ошибку: PHP fatal error: Cannot declare class App\Console\Commands\pgsql, because the name is already in use.

Это хорошо сработало в новом проекте, который я только что сделал. Но не в моем текущем проекте.

РЕДАКТИРОВАТЬ1: Я пробовал использовать php artisan pgsql:createdb schema_name и получаю There are no commands defined in the "pgsql" namespace

Но когда я использую php artisan config:cache, я получаю следующее: Ошибка при использовании конфигурации php: кеш

Как я уже сказал, это сработало для меня в новом проекте, но не в моем текущем.

РЕДАКТИРОВАТЬ2: Сработало, я больше не получаю последнюю ошибку, но получаю вот что:

Failed to create database: SQLSTATE[08006] [7] could not translate host name "connect_timeout=30" to address: Unknown server error

Добро пожаловать в Stackoverflow. У вас больше шансов получить положительный ответ, если вы поделитесь каким-то кодом, в частности тем, что вы пробовали, и любыми ошибками, с которыми вы столкнулись. Кроме того, следует провести некоторое первоначальное исследование темы, например прочитать что-то вроде laravel.io/forum/…

Tim Lewis 19.09.2018 20:46

Намного лучше. Таким образом, ошибка выглядит так, как будто у вас уже есть класс pgsql в пространстве имен App\Console\Commands. Проверьте все остальные файлы в папке Commands, убедитесь, что имя класса уникально, или измените его на другое.

Tim Lewis 19.09.2018 21:43

Эта команда - мой единственный файл в папке Commands.

alfredjmg 19.09.2018 21:55

Странно ... Боюсь, я не слишком хорошо знаком с этим сообщением об ошибке. Я собираюсь обновить теги к вашему вопросу; получить больше видимости на нем.

Tim Lewis 19.09.2018 22:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
370
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы решить PHP fatal error: Cannot declare class App\Console\Commands\pgsql, because the name is already in use., вы должны убедиться, что имя класса уникально в пространстве имен.

С другой стороны, более подходящее имя команды (согласно предложению Laravel) может быть:

class CreatePostgressDatabase extends Command

и назовите свой файл CreatePostgressDatabase.php (должно соответствовать имени класса)

Если ошибка не исчезнет, ​​попробуйте запустить composer dump-autoload и php artisan clear-compiled, чтобы очистить и перестроить кэшированные загрузчики классов.

Это сработало, теперь я не получаю эту ошибку. Но я получаю эту ошибку: Не удалось создать базу данных: SQLSTATE [08006] [7] не удалось перевести имя хоста «connect_timeout = 30» в адрес: Неизвестная ошибка сервера

alfredjmg 20.09.2018 14:46

Не стесняйтесь отмечать вопрос как ответ, чтобы помочь другим, и откройте новый вопрос с новой ошибкой. Добавьте ссылку, чтобы я тоже мог обратиться за помощью.

alariva 20.09.2018 16:53

Другие вопросы по теме