2014-11-06 2 views
0

저는 laravel을 사용하여 매우 간단한 API로 작업하고 있습니다. 사용자에게는 많은 작업이 있고 작업은 사용자에 속합니다. 다음과 같이 내 루트 파일은 다음과 같습니다Laravel hasMany 관계가 컬렉션이 아닌 방대한 양의 데이터를 반환합니까?

<?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

+1

어쨋거나 작업 대신 작업()을 사용했을 때 보았던 무제한 데이터 흐름을 설명 할 수 있습니까? – Rohan

+1

@Rohan 자세한 내용을 추가했습니다. –