Как вставить данные в другую схему, отличную от публичной схемы в базе данных.[Laravel] - PullRequest
0 голосов
/ 24 апреля 2019

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

Может кто-нибудь помочь, пожалуйста?

public function up()
{
    DB::statement('CREATE SCHEMA IF NOT EXISTS reports');

    Schema::create('reports.campaign_reports', function (Blueprint $table) 
     {
        $table->bigIncrements('id');
        $table->string('campaign')->nullable();
        $table->string('currency')->nullable();
    });
}

Это моя модель:

class CampaignReport extends Model
{

//    protected $connection = 'schema.reports';

protected $table = 'campaign_reports';

protected $fillable = [
    'campaign',
    'currency'
    ];
}

И вот как я сохраняю:

CampaignReport::create((array) $dataObject);

Я получаю эту ошибку:

SQLSTATE [42P01]: неопределенная таблица: 7ОШИБКА: отношение «campaign_reports» не существует ЛИНИЯ 1: вставить в «campaign_reports» («кампания», «валюта», ...

enter image description here

1 Ответ

1 голос
/ 24 апреля 2019

Попробуйте определить второе соединение с базой данных в конфигурации вашей базы данных:

/** config/database.php */

// ...

  'connections' => [

        'public_schema' => [
            'driver' => 'pgsql',
            'database' => env('DB_DATABASE'),
            // ...
            'schema' => 'public',
        ],

        'reports_shema' => [
            'driver' => 'pgsql',
            'database' => env('DB_DATABASE'),
            // ...
            'schema' => 'reports',
        ],
    ],

// ...

Затем установите соединение в вашей модели (это полезно для выполнения операций Eloquent / Query Builder):

class CampaignReport extends Model
{

    protected $connection = 'reports_schema'; // <----

    protected $table = 'campaign_reports';

    protected $fillable = [
            'campaign',
            'currency'
        ];

    // ...
}

Конечно, когда вы выполняете миграцию, которая должна быть запущена в соединении, отличном от используемого по умолчанию, вы должны указать его:

public function up()
{
    DB::statement('CREATE SCHEMA IF NOT EXISTS reports');

    Schema::connection('reports_schema')->create('campaign_reports', function (Blueprint $t)
#           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
     {
        $t->bigIncrements('id');
        $t->string('campaign')->nullable();
        $t->string('currency')->nullable();
    });
}

Кстати, обновите ключ базы данных по умолчанию .env наэто:

DB_CONNECTION=public_schema
...