Eloquent关系查询构建方法返回空

时间:2016-05-30 17:20:36

标签: laravel laravel-5 eloquent

我有一对多的关系,在将关系用作查询的属性时效果很好,但是当我尝试将其用作方法时,它总是返回空。

用户模型

public function reports()
{
    return $this->hasMany('App\Report', Report::COL_USER_ID, self::COL_ID);
}

报告模型

public function user()
{
    return $this->hasOne('App\User', User::COL_ID, self::COL_USER_ID);
}

此作品

$reports = User::find($id)->reports;

这不是我需要的东西

$reports = User::find($id)->reports()->orderBy(Report::COL_CREATED_AT, self::ORDER_BY_DESC);

根据雄辩的文档,"因为所有关系也可以作为查询构建器,你可以添加更多的约束",这样应该完全检索正确的数据,我错过了什么?在此先感谢您的任何帮助

1 个答案:

答案 0 :(得分:1)

您需要使用get方法来获取实际结果,因此您应该使用:

$reports = User::find($id)->reports()->orderBy(Report::COL_CREATED_AT, self::ORDER_BY_DESC)->get();

而不仅仅是:

$reports = User::find($id)->reports()->orderBy(Report::COL_CREATED_AT, self::ORDER_BY_DESC);

在您的情况下,您只创建了查询,但没有从数据库中获取任何结果。这就是为什么你没有得到任何结果。

原因:

$reports = User::find($id)->reports;

作品是因为它是:

的捷径
$reports = User::find($id)->reports()->get();

如果您尝试使用:

$reports = User::find($id)->reports();

只有你不会得到任何结果。