Я не могу запустить php artisan migrate

Я пытаюсь запустить команду php artisan migrate, но не понимаю. Я получаю эту ошибку

SQLSTATE [42601]: синтаксическая ошибка: 7 ОШИБКА: идентификатор с разделителями нулевой длины в или рядом с "" "" \ n СТРОКА 1: установить search_path в "" \ n ^ (SQL: выбрать count (*) как агрегат из "categoryoria" где «deleted_at» имеет значение NULL, а «category». «deleted_at» равно NULL).

Моя категория миграции класса:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCategoriasTable extends Migration
{
    /**
    * Run the migrations.
    *
    * @return void
    */
    public function up()
    {
        Schema::create('categoria', function (Blueprint $table) {
            $table->increments('id');
            $table->string('nome', 60);
            $table->timestamps();
            $table->softDeletes();
        });
    }

    /**
    * Reverse the migrations.
    *
    * @return void
    */
    public function down()
    {
        Schema::dropIfExists('categoria');
    }
}

Это происходит, когда я запускаю команду php artisan migrate. В бродяге эта ошибка появляется

vagrant@homestead:~/code/controle-interno$ php artisan migrate
**************************************
*     Application In Production!     *
**************************************

 Do you really wish to run this command? (yes/no) [no]:
 > yes


In Connection.php line 664:

  SQLSTATE[42601]: Syntax error: 7 ERROR:  zero-length delimited identifier at or near """"
  LINE 1: set search_path to ""
                             ^ (SQL: select * from information_schema.tables where table_schema = public and table_name = migrations)


In PDOStatement.php line 143:

  SQLSTATE[42601]: Syntax error: 7 ERROR:  zero-length delimited identifier at or near """"
  LINE 1: set search_path to ""
                             ^


In PDOStatement.php line 141:

  SQLSTATE[42601]: Syntax error: 7 ERROR:  zero-length delimited identifier at or near """"
  LINE 1: set search_path to ""
                             ^

Моя установка - это самая последняя усадьба Laravel

  • Laravel 5.5
  • Postgres 10.4

Буду очень признателен за любую помощь!


person Iago Frota    schedule 27.06.2018    source источник
comment
Пожалуйста, разместите код, а не просто ошибку. Вопросы, требующие помощи по отладке («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и необходимый кратчайший код < / i>, чтобы воспроизвести его в самом вопросе. Вопросы без четкой постановки проблемы не будут полезны другим читателям. См .: Как создать минимальный, полный и проверяемый пример.   -  person elixenide    schedule 27.06.2018
comment
Какую версию Laravel вы используете?   -  person Rwd    schedule 27.06.2018
comment
Вы уверены, что у вас правильная конфигурация базы данных? (Особенно схема Postgres?)   -  person Matt Gibson    schedule 27.06.2018
comment
@RossWilson Я улучшил описание своей проблемы.   -  person Iago Frota    schedule 28.06.2018
comment
@MattGibson Да, я знаю. Я использую dbeaver и проверил, создана ли схема.   -  person Iago Frota    schedule 29.06.2018


Ответы (1)


Я смог решить свою проблему, изменив переменную $schema метода configureSchema ($connection, $config) класса /vendor/laravel/framework/src/Illuminate/Database/Connectors/PostgresConnector.php на созданную мной схему.

До

/**
 * Set the schema on the connection.
 *
 * @param  \PDO  $connection
 * @param  array  $config
 * @return void
 */
protected function configureSchema($connection, $config)
{
    if (isset($config['schema'])) {
        $schema = $this->formatSchema($config['schema']);

        $connection->prepare("set search_path to {$schema}")->execute();
    }
}

После

/**
 * Set the schema on the connection.
 *
 * @param  \PDO  $connection
 * @param  array  $config
 * @return void
 */
protected function configureSchema($connection, $config)
{
    if (isset($config['schema'])) {
        // $schema = $this->formatSchema($config['schema']);
        $schema = 'controle_interno';

        $connection->prepare("set search_path to {$schema}")->execute();
    }
}

Я осознал проблему при отладке трассировки стека и понял, что по какой-то причине переменная $schema становится пустой.

Если кто-то лаконично объяснит, почему возникает эта ошибка, я отмечаю это как ответ.

person Iago Frota    schedule 29.06.2018