laravel-6 - Laravel Nova 错误基表或未找到视图
问题描述
未找到基表或视图:1146 表 'newsim_yrpixakb.action_events' 不存在(SQL:插入
action_events
(batch_id
,user_id
,name
,actionable_type
,actionable_id
,target_type
,target_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 中的添加客户端按钮。所以我已经将它添加到用户模型中,除了错误消息之外所有的工作。
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'
]);
}
解决方案
手动从用户架构中删除所有表并重新运行迁移解决了我的问题。
推荐阅读
- ios - UITabBar swift中缺少按钮
- python - chart.render_to_file('python_repos.svg')AttributeError: 'NoneType' 对象没有属性 'decode'
- java - Java 计算不同
- bash - 从 bash 启动时在 tmux 中绑定源文件
- javascript - 多个窗口使用 window.open() AND '
- python - AttributeError:“MySQL”对象没有属性“模型”
- javascript - Vanilla JavaScript - 仅使用事件冒泡选择“this”特定元素
- android - 在 Google Play 商店中打开应用程序
- node.js - 如何在此处触发错误页面的获取请求?
- node.js - Nodejs - 从生成的 bat 文件进程中隐藏窗口 | 视窗