【问题标题】:Laravel Nova error base table or view not foundLaravel Nova 错误基表或未找到视图
【发布时间】:2020-03-13 06:47:04
【问题描述】:

未找到基表或视图:1146 表 'newsim_yrpixakb.action_events' 不存在(SQL:插入 action_events (batch_id, user_id, name, actionable_type, actionable_idtarget_typetarget_id

Laravel Nova 正在尝试使用租户数据库添加操作事件信息。

我有一个多客户端应用程序,它的工作原理是这样的。所有客户都登录 example.com,根据他们的信息,他们只看到他们需要看到的内容。在主系统数据库中,我有用户、页面等,其中客户端只能看到用户资源并且只有与他们的 org_id 关联的用户

每个客户都有一个不同的数据库来查看他们的成员、事件、项目表。我在每个模型中使用此代码更改数据库。此处使用 auth()->user()->dbname,以便超级管理员可以在客户端之间移动以获得客户端支持。

public function __construct()
{
    parent::__construct();
    if (auth()->user()->dbname) {
        Config::set('database.connections.tenant.database', auth()->user()->dbname);
        $this->connection = 'tenant';
    }
}

现在我正在尝试添加一个新客户端,然后添加一个数据库并迁移。我可以通过自定义工匠命令执行此操作,但想在 nova 中使用添加客户端按钮。所以我把它添加到了 User 模型中,除了错误消息之外所有的工作。

public static function boot()
{
    parent::boot();

    static::creating(function ($user) {
        $user->active = 1;
        $user->org_id = self::nextOrgId();
        $user->dbname = $user->createNewDatabaseName();
        $user->aps_token = Str::random(32);
    });
    static::created(function ($user) {
        $user->createNewClientDatabase();
    });
    static::updating(function ($user) {
        $user->syncClientFields();
    });
}

public function createNewClientDatabase()
{
    $systemDB = env('DB_DATABASE');
    $charset = config("database.connections.mysql.charset", 'utf8mb4');
    $collation = config("database.connections.mysql.collation", 'utf8mb4_unicode_ci');
    $query = "CREATE DATABASE IF NOT EXISTS $this->dbname CHARACTER SET $charset COLLATE $collation;";

    try {
        \DB::statement($query);
    } catch (\Exception $e) {
        return $e->getMessage();
        exit;
    }

    Config::set('database.connections.mysql.database', $systemDB);
    \DB::purge('mysql');

    Config::set('database.connections.tenant.database', $this->dbname);
    \DB::purge('tenant');
    Artisan::call('migrate', [
        '--database' => 'tenant',
        '--path' => 'database/NewClient'
    ]);
}

【问题讨论】:

  • 嗨,@dmgd,你是如何解决这个问题的,我的情况几乎与我运行迁移以使用 --path 参数创建租户表的情况相同,但这似乎不是运行 nova 自己的迁移,这就是创建 action_events 表的原因。任何帮助/指针将不胜感激
  • @Obi 我必须将 action_event 表的副本添加到租户迁移中。我尝试停止动作事件,但没有成功。

标签: laravel-6 laravel-nova


【解决方案1】:

从用户架构中手动删除所有表并重新运行迁移解决了我的问题。

【讨论】:

    猜你喜欢
    • 2019-06-09
    • 2016-04-16
    • 2016-06-21
    • 1970-01-01
    • 2018-01-25
    • 2023-03-08
    • 2016-09-23
    • 2016-01-25
    相关资源
    最近更新 更多