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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:45:33