Как исправить проблему «Аргумент 1, переданный в App \ TenantConnection :: newDatabaseConnection () должен реализовать интерфейс ..»? - PullRequest
0 голосов
/ 26 марта 2019

Спасибо, что прочитали мой вопрос :)

Я пытаюсь настроить многопользовательский режим в laravel 5.8.

С помощью этого урока (https://codecourse.com/watch/laravel-tenancy-multi-database) я приблизился к своей цели уже на шаг ближе, но вынужден отступить из-за следующего сообщения об ошибке:

SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец «uuid» в «списке полей» (SQL: вставить в tenant_connections (database, company_id, uuid, updated_at, created_at) значения (fresh_12, 12, 3d98bc5a-cf74-4cb1-9b30-63a47a42de4a, 2019-03-26 10:53:07, 2019-03-26 10:53:07))

Значение uuid вставляется в таблицу "companies", но тем не менее laravel ищет столбец uuid в таблице "tenant_connections".

В качестве первого подхода я создал запрошенный столбец в таблице "tenant_connections". Это «решило» проблему, но вызвало следующее новое сообщение:

Аргумент 1, передаваемый в App \ TenantConnection :: newDatabaseConnection (), должен реализовывать интерфейс App \ Tenant \ Models \ Tenant, данный экземпляр App \ TenantConnection вызывается в / home / vagrant / code / app / Tenant / Traits / IsTenant. PHP на линии 23

Я вставил наиболее важные фрагменты кода ниже:

Извлечение строки 13-26 в -> app / Tenants / Traits / isTenant.php - Traitfile

public static function boot(){

      parent::boot();

      static::creating(function($tenant) {
           $tenant->uuid = Uuid::generate(4);
      });


      static::created(function($tenant) {
           $tenant->tenantConnection()->save(static::newDatabaseConnection($tenant));
      });

  }

Выдержка маршрутов / web.php, где создаются клиенты при каждой загрузке страницы

use App\Company;

Route::get('/', function () {

    Company::create(['name' => 'Oli']);

    return view('home');

});

app / Company.php File

<?php

namespace App;

use App\Tenant\Models\Tenant;
use App\Tenant\Traits\IsTenant;
use Illuminate\Database\Eloquent\Model;

class Company extends Model implements Tenant
{
    use IsTenant;

    protected $fillable =['name', 'uuid'];
}

app / Tenants / Models / Tenant.php - пустой интерфейс

<?php

namespace App\Tenant\Models;

interface Tenant {

}

Два столбца uuid в разных таблицах, не имеют никакого смысла. Мое вышеописанное решение было просто обходным путем, чтобы приблизиться к проблеме.

Предположительно, я должен указать laravel, что uuid нужно вставить только один раз, и laravel не нужно искать этот столбец в другой таблице. Но я не знаю почему :) 1039

Ваша помощь высоко ценится. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...