我在使用Slim Framework上的Eloquent选择数据透视表行时遇到了一些麻烦。我有以下关系:
tb_bet (id,...)
tb_fixture (id,...)
tb_bet_fixture (bet_id,fixture_id,status)
模型:
Bet.php:
use \Illuminate\Database\Eloquent\Model;
class Bet extends Model {
protected $connection = 'client';
protected $table = 'tb_bet';
public $timestamps = false;
public function fixtures() {
return $this->belongsToMany('Fixture')->withPivot('status');
}
}
Fixture.php:
use \Illuminate\Database\Eloquent\Model;
class Fixture extends Model {
protected $connection = 'client';
protected $table = 'tb_fixture';
public $timestamps = false;
public function bets() {
return $this->belongsToMany('Bet')->withPivot('status');
}
}
我能够从投注中查询所有投注以及投注中的所有投注,但我真正需要的是这样做:select * from tb_bet_fixture where bet_id = 1
。所以我有一个给定投注的所有夹具状态列表。有点像这样:
bet:{
'id': 1,
'pivot': [
{bet_id: 1, fixture_id: 2, status: true},
{bet_id: 1, fixture_id: 3, status: false},
{bet_id: 1, fixture_id: 4, status: true}
]
}
我想过使用原始查询,但每当我尝试在我的控制器上声明use Illuminate\Database\Capsule\Manager as DB;
并使用$users = DB::select('select * from tb_users');
作为测试时,我会收到Database [default] not configured.
错误,我无法知道如何访问包含当前连接的'$ capsule'变量(是的,我使用多个连接到不同的db)并在中间件上定义。无论如何,我很感激任何帮助。
答案 0 :(得分:2)
选项1:创建模型
如果我使用枢轴作为模型。我会为数据透视表创建一个模型。这样你就可以直接查询表了。像这样。
use \Illuminate\Database\Eloquent\Model;
use App\Bet;
class BetFixture extends Model
{
protected $table =‘tb_bet_fixture’;
public function bets()
{
return $this->hasMany(Bet::class);
}
}
这会比查询更简单,更清晰,因为你正在直接从枢轴中选择
select * from tb_bet_fixture where bet_id = 1.
选项2:选择使用灯具,具体投注
如果你想通过灯具选择具有特定投注的灯具,你可以这样查询。
Fixture::with(‘bets’ => function($query) use ($betId) {
$query->where(‘tb_bet_fixture.bet_id,$betId);
});