2017-02-16 11 views
0

Мои модели являются следующие:Получить ограниченный набор результатов от второго отношения

Account -> Check -> Результат

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

Очевидно, что не работает после проверок(), я получаю и ошибочно сообщает, что результаты() не определены, вероятно, потому, что они смотрят на Учетную запись.

Как я могу достичь этого без 2-3 запросов?

И я не хочу использовать QueryBuilder для этого «вручную», я хотел бы сохранить его Красноречивым.

Спасибо!

ответ

2

Вы можете добавить связь, чтобы напрямую подключаться к учетным записям и результатам, а модель проверки - промежуточной.

// 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

Привет, я рад, что это помогло. :) –