在不使用循环的情况下获取关系的关系


Laravel fetch relation of relation without using a loop

现在我有点为难。我正在尝试使用更多的laravels惯例来优化旧代码,而不是为了获得我需要的数据而制造自己的循环。

这是我现在写的:

区域模型

class Region extends Eloquent {
    public $timestamps = false;
    public function vms() {
        return $this->hasMany('Vm');
    }
}

博弈模型

class Game extends Eloquent {
    public $table = 'vm_games';
    public function vm() {
        return $this->hasOne('Vm');
    }
}

Vm模型

class Vm extends Eloquent {    
    public function games() {
        return $this->hasMany('Game');
    }
}

现在我想做的是:

$games = 0;
foreach($region->vms()->where('status', true)->get() as $vm) {
    $games += $vm->games()->where('created_at', '>', date('Y-m-d H:i:s', time() - 5400))->count();
}
$sorted[$region->id]->games = $games;

当然,现在使用Laravels雄辩关系要干净得多:

$region->vms()->where('status', true)->count();

现在我要做的是这样的:

$games = $region->vms()->where('status', true)->games();

这显然是行不通的,我也试过用"with"answers"whereHas"来玩,但无济于事。

我真的希望你能帮我。

亲切的问候,Niek

您可以尝试这样做,使用即时加载和pluck():

$games = Region::with(['vms' => function($query) {
    $query->where('status', true);
}, 'vms.games'])->get()->pluck('vms.games');