Laravel有很多关系返回大量数据而不是集合?

时间:2014-11-06 11:11:55

标签: php laravel laravel-4 eloquent foreign-key-relationship

我正在使用laravel开发一个非常简单的API。用户有许多任务,任务属于用户。我的路线文件如下:

<?php

Route::resource('users', 'UsersController');
Route::get('users/{user_id}/tasks', 'UsersController@show_tasks');
Route::resource('tasks', 'TasksController');

我希望第二条路线获得与该特定用户相关的所有任务。很简单。我刚刚在我的用户模型中添加了一个关系,如下所示:

public function tasks(){
        return $this->hasMany('Task');
    }

show_tasks中的UsersController方法如下:

public function show_tasks($id){

    if(!$user = $this->user->find($id)){
        return Acme::response('error', 'Resource not found.', [], 404);
    }

    $tasks = $user->tasks();
    dd($tasks);

    return Acme::response('success', [], $tasks, 200);
}

我已经放置了dd方法,因为响应返回了一个空数组,我希望第一手看到$tasks变量中的内容。我认为它必须是一个集合对象但是当我在Postman REST客户端中运行它时,由于我假设的大数据溢出而挂起,截图如下:

Output from the dd method call!

如果有人对Acme::response方法感到好奇,我也会包含该代码:

public static function response($status = [], $messages = [], $data = [], $httpStatusCode){
        return Response::json([
            'status' => $status,
            'messages' => $messages,
            'data' => $data,
        ], $httpStatusCode);
    }

为什么这段关系不起作用?我已经这几个小时,仍然无法弄清楚为什么!我猜我可能在某个地方做了一个非常愚蠢的错误,但无论如何都无法达到它!

1 个答案:

答案 0 :(得分:2)

你不应该在这里使用()。而不是:

$tasks = $user->tasks();

您将使用以下方式完成任务:

$tasks = $user->tasks;

修改

如果您有关系并且使用$user->tasks,那么它就像使用$user->tasks()->get()一样有效,因此我们可以说它是一种捷径。

你可以使用你得到关系的parantheses,你可以添加更多的条件,例如你可以这样做:

$tasks = $user->tasks()->active()->get();

并在Task模型中定义范围:

function activeScope($q) {
  return $q->where('status',1);
}

现在,您只能为用户获取活动任务。