从第二个关系中检索有限的结果集

时间:2017-02-16 14:30:45

标签: php laravel eloquent

我的模型如下:

帐户 - >检查 - >结果

class Account extends Model {
  public function checks() {
    return $this->hasMany('App\Check');
  }
}

class Check extends Model {
  public function results() {
    return $this->hasMany('App\Result');
   }
}

class Result extends Model {
  public function check() {
    return $this->belongsTo('App\Check');
   }
}

现在我正在尝试从控制器做这样的事情:

$results = Account::find(1)->checks()->results()->where('result_type', 'ERROR')->orderBy('result.id', 'desc')->limit(25)->get();

在check()之后显然无法正常工作,我得到并且错误表明results()未定义,可能是因为它正在调查Account。

如果不进行2-3次查询,我怎样才能实现?

而且我不想使用QueryBuilder来手动执行#34;我想保持它的雄辩。

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以直接连接帐户和结果,并将Check模型作为中间人。

// on the Account model
public function results() {
    return $this->hasManyThrough('App\Result', 'App\Check');
}

然后,您可以直接在帐户上执行->results()并从那里进行查询。 :)换句话说,您的查询将正常运行,您只需要删除->checks()调用。

文档:https://laravel.com/docs/5.4/eloquent-relationships#has-many-through