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

Slim框架下Eloquent查询中间表tb_bet_fixture行数据问题

我来帮你搞定这个问题,分几个不同的方案,从最贴合Eloquent设计的用法到原生查询的修复,还有如何解决容器访问的问题:

方案1:用Eloquent关联直接获取中间表数据(推荐)

既然你已经在Bet模型里定义了belongsToMany关联并指定了withPivot('status'),完全不需要写原生SQL就能拿到指定投注的中间表数据,这也是Eloquent多对多关联的标准用法:

  • 获取指定bet_id的所有中间表完整记录(包含bet_id、fixture_id、status):
// 找到ID为1的投注
$bet = Bet::find(1);
// 提取关联的中间表pivot对象(每个对象包含status字段)
$betFixtureRecords = $bet->fixtures->map(function ($fixture) {
    return $fixture->pivot;
});
  • 如果只需要status字段的列表,可以用更简洁的写法:
$statusList = $bet->fixtures->pluck('pivot.status');
  • 想要更高效(避免加载整个Fixture模型),可以直接查询关联的中间表:
$betFixtureRecords = Bet::find(1)->fixtures()
    ->select('tb_bet_fixture.*')
    ->get();
方案2:修复原生查询的数据库连接问题

你遇到的「Database [default] not configured」错误,是因为默认的DB facade会使用default数据库连接,但你的项目用的是多连接配置,且模型指定的是client连接。解决方法很简单,在原生查询时显式指定连接即可:

use Illuminate\Database\Capsule\Manager as DB;

// 显式指定使用'client'连接执行查询
$betFixtures = DB::connection('client')
    ->table('tb_bet_fixture')
    ->where('bet_id', 1)
    ->get();
方案3:在控制器中访问Middleware里的Capsule实例

如果你的$capsule是在Middleware中初始化的,想要在控制器中访问它,最规范的方式是把Capsule注册到Slim的依赖注入容器中:

  1. 在Middleware初始化Capsule后,将其绑定到容器:
// 假设$app是你的Slim应用实例
$container = $app->getContainer();
$container['db'] = function ($c) use ($capsule) {
    return $capsule;
};
  1. 在控制器中通过容器获取Capsule并使用:
class BetController {
    protected $db;

    // 通过构造函数注入容器(或者直接注入db实例)
    public function __construct($container) {
        $this->db = $container->get('db');
    }

    public function getBetFixtureStatuses($request, $response, $args) {
        // 使用指定的client连接执行查询
        $betFixtures = $this->db->connection('client')
            ->table('tb_bet_fixture')
            ->where('bet_id', $args['bet_id'])
            ->get();
        
        // 返回JSON响应
        return $response->withJson($betFixtures);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:49:54