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
相关产品推荐
相关产品推荐

