You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.5 SQL迁移问题:如何自定义数据库表架构?

如何在Laravel迁移中自定义SQL Server表架构(替换Windows登录用户架构)

当然可以解决这个问题!你碰到的情况是Laravel默认会沿用数据库连接所用Windows登录用户对应的架构来创建表。要切换到自定义的APP架构,只需要调整配置并修改模型设置就行,具体步骤如下:

1. 配置数据库连接的默认架构

首先修改数据库连接配置,让Laravel默认使用APP架构。你可以直接编辑config/database.php里的SQL Server连接项:

'connections' => [
    'sqlsrv' => [
        'driver' => 'sqlsrv',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '1433'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'prefix' => '',
        'prefix_indexes' => true,
        'schema' => 'APP', // 指定默认使用APP架构
    ],
],

如果想通过环境变量灵活配置,在.env文件中添加一行DB_SCHEMA=APP,然后把上面的'schema'值改成env('DB_SCHEMA', 'APP')即可。

2. (可选)在迁移文件中显式指定架构

如果需要为特定表单独指定架构,或者想确保迁移时明确指向APP,可以在迁移文件的up()方法里直接声明架构+表名:

public function up()
{
    Schema::create('APP.migration', function (Blueprint $table) {
        $table->id();
        // 添加你的字段定义
    });
}

不过要是已经在数据库配置里设置了默认架构,这一步可以省略,Laravel会自动用APP架构创建所有迁移表。

3. 在User模型中指定默认架构

为了让Eloquent模型默认使用APP架构下的表,打开app/Models/User.php,添加$table属性来指定完整的架构+表名:

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    /**
     * 关联的数据表
     *
     * @var string
     */
    protected $table = 'APP.users'; // 明确指定APP架构下的users表

    // 其他模型代码...
}

如果你的其他业务模型也需要使用APP架构,用同样的方式给它们添加$table属性即可。

4. 重新执行迁移

最后,清空之前生成的旧表(如果需要保留数据可以跳过这步,直接执行php artisan migrate),然后重新运行迁移:

php artisan migrate:fresh

这样生成的所有表就都会在APP架构下,而不是之前的Windows登录用户架构了。

内容的提问来源于stack exchange,提问作者Led

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:11:42