如何解决“传递给App \ TenantConnection :: newDatabaseConnection()的参数1必须实现接口。”问题?

时间:2019-03-26 12:14:18

标签: php laravel multi-tenant

感谢您阅读我的问题:)

我正在努力在laravel 5.8中设置多租户。

借助本教程(https://codecourse.com/watch/laravel-tenancy-multi-database),我的目标已经接近了一步,但是由于以下错误消息而被迫退出:

SQLSTATE [42S22]:找不到列:1054'字段列表'中的未知列'uuid'(SQL:插入tenant_connectionsdatabasecompany_id,{{1} },uuidupdated_at)值(fresh_12,12,3d98bc5a-cf74-4cb1-9b30-63a47a42de4a,2019-03-26 10:53:07,2019-03-26 10:53: 07))

uuid的值已插入“ companies”表中,但是laravel仍在“ tenant_connections”表中查找uuid列。

作为第一种方法,我在“ tenant_connections”表中创建了请求的列。它“解决”了问题,但引起了以下新消息:

传递给App \ TenantConnection :: newDatabaseConnection()的参数1必须实现接口App \ Tenant \ Models \ Tenant,给定的App \ TenantConnection实例,在/ home / vagrant / code / app / Tenant / Traits / IsTenant中调用。第23行的php

我在下面粘贴了最重要的代码段:

-> app / Tenants / Traits / isTenant.php-Traitfile中第13-26行的摘录

created_at

提取routes / web.php并在每个页面加载中创建租户的地方

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));
      });

  }

app / Company.php文件

use App\Company;

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

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

    return view('home');

});

app / Tenants / Models / Tenant.php-界面为空

<?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'];
}

不同表中的两个uuid列没有任何意义。我上面描述的解决方案只是解决问题的一种变通方法。

大概我必须指出laravel,只需将uuid插入一次,而laravel不必在另一个表中查找该列。但我不知道为什么:)

非常感谢您的帮助。预先谢谢你。

0 个答案:

没有答案