2014-11-06 84 views
0

我正在使用一个非常简单的API使用laravel。用户有许多任务,任务属于用户。我的路线文件如下:Laravel有很多关系返回不是集合的大量数据吗?

<?php 

Route::resource('users', 'UsersController'); 
Route::get('users/{user_id}/tasks', '[email protected]_tasks'); 
Route::resource('tasks', 'TasksController'); 

我希望第二条路线获取与该特定用户相关的所有任务。很简单。我只是在我的用户模型中添加的关系如下:

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

而在我UsersControllershow_tasks方法如下:

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变量的第一手牌是什么。我想这一定是一个集合对象,但是当我跑这在我的邮差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); 
    } 

为什么关系不起作用?我已经这几个小时,仍然无法弄清楚为什么!我猜测我可能在某个地方犯了一个非常愚蠢的错误,但无论如何也无法完成。

回答

2

您不应该在这里使用()。相反的:

$tasks = $user->tasks(); 

,你会用得到你的任务:

$tasks = $user->tasks; 

编辑

当你有关系,你用$user->tasks它的作品,你会使用$user->tasks()->get()所以我们可以说这是一条捷径。

你可以使用括号你的关系,你可以添加更多的条件,例如,你可以做这样的事情:

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

,并在您Task模型中定义范围:

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

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

+0

哈哈,我知道我在做一件傻事!谢谢!只要它能让我接受你的答案。 – Rohan 2014-11-06 11:24:00

+1

无论如何,你能解释一下我使用任务()而不是任务时看到的无限数据流吗? – Rohan 2014-11-06 11:25:53

+1

@Rhan我添加了更多细节 – 2014-11-06 12:02:59