我的模型如下:
帐户 - >检查 - >结果
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;我想保持它的雄辩。
谢谢!
答案 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