Laravel 不使用循环获取关系的关系

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');
    }
}

虚拟机型号

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 Eloquent 关系更清晰:

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

现在我想做的是这样的:

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

这显然行不通,我也试过 "with" 和 "whereHas" 但无济于事。

真心希望你能帮帮我。

亲切的问候, 尼克

你可以尝试这样的事情,使用预加载和 pluck():

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