2017-02-16 3 views
0

私のモデルは以下の通りです:は、第2の関係から限定された結果セットを取得

アカウント - >チェック - >

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()が定義されていないというエラーが表示されます。

2-3回のクエリを実行せずにどのように達成できますか?

私はQueryBuilderを使って "手動で"したくないので、私はそれをEloquentにしておきたいと思います。

ありがとうございます!

答えて

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

乾杯、私はそれが助けてうれしいです。 :) –

関連する問題