当找不到任何内容时,奇异查询范围返回空数组

时间:2018-01-13 19:36:36

标签: laravel laravel-5.5

我正在尝试创建一个返回第一个最新或null的查询范围。

我是这样创建的:

public function scopeUpcomingAction()
{
    $upcomingAction = $this->actions()->latest()->whereNotNull('completed_at')->take(1);
    if ($upcomingAction->exists()) {
        return $upcomingAction;
    } else {
        return null;
    }
}

但是当我像这样使用这个范围时:

    return $subject->load([
        'tasks' => function($query) {
            $query->with('upcomingAction');
        }
    ]);

当comingAction为null时,它给我一个像这样的空数组:

    {
        "id": 3,
        "created_at": "2018-01-13 19:08:30",
        "updated_at": "2018-01-13 19:08:30",
        "upcoming_action": []
    }

这可以说是单数吗?

1 个答案:

答案 0 :(得分:1)

您使用本地范围作为与with()方法的关系。你不能这样做。您应该使用这样的本地范围:

Model::someScope()->get();

加载single latest record for hasMany() relation is pretty tricky。您需要创建另一个关系,它必须是hasOne()