2017-02-16 43 views
0

我的模型如下:检索第二关系的有限的结果集

账户 - >查看 - >结果

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(); 

很明显,在checks()后,我得到了错误,并且result()未定义,可能是因为它正在查看Account。

如何在没有2-3次查询的情况下实现它?

而我不想使用QueryBuilder“手动”操作,我想保留它雄辩。

谢谢!

回答

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

+0

感谢一堆,正是我一直在寻找! +1作为我最喜欢的人:) – wanted

+0

干杯,我很高兴它有帮助。 :) –