2017-02-16 42 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

乾杯,我很高興它有幫助。 :) –