【问题标题】:Eloquent relationships query building method returns emptyEloquent 关系查询构建方法返回空
【发布时间】:2016-09-28 14:12:37
【问题描述】:

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

用户模型

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

根据雄辩的文档,“由于所有关系也可以作为查询构建器,您可以添加进一步的约束”,所以这应该完全是检索正确的数据,我错过了什么吗?在此先感谢您的帮助

【问题讨论】:

    标签: laravel laravel-5 eloquent


    【解决方案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();
    

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

    【讨论】:

    • 谢谢!感觉这很荒谬:/
    猜你喜欢
    • 2019-02-26
    • 2013-11-30
    • 2018-12-04
    • 2017-01-29
    • 1970-01-01
    • 2021-06-10
    • 2013-10-03
    • 2017-07-19
    • 1970-01-01
    相关资源
    最近更新 更多