2014-11-06 89 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