MySQL迁移至SQL Server 2019后Eloquent查询users表报错求助
解决Eloquent查询SQL Server时未指定架构名的问题
针对你遇到的Eloquent生成SQL时缺少soraeir架构名导致找不到表的问题,有以下几种可行方案:
1. 全局配置默认架构(推荐)
修改config/database.php中的SQL Server连接配置,添加schema参数指定默认架构:
'connections' => [ 'sqlsrv' => [ 'driver' => 'sqlsrv', 'host' => env('DB_HOST', 'localhost'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', 'prefix_indexes' => true, // 添加这一行指定默认架构 'schema' => 'soraeir', ], ],
配置后,Eloquent所有查询都会自动带上soraeir架构前缀,无需修改模型代码。修改配置后若开启了配置缓存,记得执行php artisan config:clear生效。
2. 在单个模型中指定带架构的表名
如果只有部分模型需要使用该架构,可以直接在对应模型中设置$table属性:
namespace App\Models; use Illuminate\Database\Eloquent\Model; class User extends Model { // 直接指定带架构的表名 protected $table = 'soraeir.users'; }
这种方式适合仅少数模型需要特定架构的场景。
3. 自定义基础模型类(批量处理)
如果大部分模型都需要使用该架构,可以创建一个基础模型类,其他模型继承它,在基础模型中统一处理表名:
namespace App\Models; use Illuminate\Database\Eloquent\Model; class BaseModel extends Model { protected function getTable() { // 自动为表名添加架构前缀 return 'soraeir.' . parent::getTable(); } }
然后让你的User模型(及其他需要的模型)继承这个BaseModel:
namespace App\Models; class User extends BaseModel { // 无需再指定$table,会自动生成soraeir.users }
内容的提问来源于stack exchange,提问作者Tonio Esker
相关产品推荐
相关产品推荐

