使用 Laravel 的多租户调用未定义的方法

问题描述 投票:0回答:2

我有一个项目需要使用多数据库实现多租户。

我已经完成了安装过程,并为我的租户创建了一个域,但每次我尝试访问它时都会收到此错误:

Call to undefined method Stancl\Tenancy\Database\Models\Tenant::domains()

domains 函数是在一个名为 HasDomains 的特征上找到的,但我不明白为什么 Laravel 无法解析它。

这是我的模型:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\Concerns\HasDatabase;
use Stancl\Tenancy\Database\Concerns\HasDomains;
use Stancl\Tenancy\Database\Models\Tenant as ModelsTenant;

class Tenant extends ModelsTenant implements TenantWithDatabase
{
    use HasFactory;
    use HasDatabase;
    use HasDomains;
}

有什么想法吗?

php laravel multi-tenant
2个回答
0
投票

您创建了租户吗?

>> $tenant1 = Tenant::create(['id' => 'foo']);
>> $tenant1->domains()->create(['domain' => 'foo.saas.test']);

因为如错误所示,它调用

HasDomain
并且该域不存在于数据库中。

如果你这样做,它应该会修复。并注意,将

foo.saas.test
更改为托管项目/租户 URL 的域。


0
投票

我的 Docker 项目。就我而言,我在调用迁移命令时发现了此错误

php artisan tenants:migrate

我做了一些小的更改并重新保存了以下文件。问题消失了! 我的观点是这些文件没有正确存储在 Docker 中,并且 Laravel 无法访问它们。

laravel/app/Models/Tenant.php 
laravel/config/tenancy.php

© www.soinside.com 2019 - 2024. All rights reserved.