我的模型如下:
Account ->检查->结果
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()之后,它显然不起作用,我的get和error表明没有定义result(),这可能是因为它正在查找。
如果不做2-3次查询,我如何才能实现它?
我不想使用QueryBuilder来“手动”完成它,我想让它更有说服力。
谢谢!
发布于 2017-02-16 22:34:59
您可以添加一个关系来直接连接帐户和结果,并使用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
https://stackoverflow.com/questions/42276786
复制相似问题