2016-08-23 4 views
1

저는 Laravel에 RESTful API를 구축하고 있는데, 프런트 엔드 앱은 Angular입니다.Laravel의 중첩 된 리소스에서 모델 바인딩

저는 여러 모델/컨트롤러와 경로가 있습니다. 중첩 된 리소스를위한 안정된 경로를 만드는 데 어려움을 겪고 있습니다.

예를 들어, 클라이언트의 목록을 표시하는 내 경로는 간단하다 :

Route::resource('clients', 'ClientsController'); 

클라이언트는 많은 캠페인을 가질 수있다 : 나는 모든 캠페인을 표시하는 경로가 필요하지 않습니다

class Client extends Model 
{ 

    public function campaigns() 
    { 
     return $this->hasMany('App\Campaign'); 
    } 

} 

을, 그러나 나는 클라이언트를 기반으로 모든 캠페인을 보여줄 경로가 필요합니다.

Route::resource('clients.campaigns', 'CampaignsController'); 

내 의도는 할 각 응용 프로그램에 의해 요구 된 엔드 포인트에 대한이었다

'6'클라이언트 ID입니다
myapp/api/clients/6/campaigns 

. 이것은,이 클라이언트 ID를 얻기 위해 바인딩 암시 적 모델을 사용하려고 내 색인 방법은 ID 6.

와 클라이언트에 속하는 캠페인의 목록을 반환하지만, 난 항상 빈 결과 집합 얻을 :

class CampaignsController extends ApiController 
{ 

    public function index(Client $client) 
    { 
     $campaigns = Campaign::where('client_id', $client->id)->get(); 
     if (!count($campaigns)) { 
      Log::warning('Campaigns list is empty'); 
      return $this->respondNotFound('No Campaigns Found'); 
     } 

     try { 
      return $this->respond([ 
       'data' => $this->campaignTransformer->transformCollection($campaigns->all()) 
      ]); 
     } catch (\Exception $e) { 
      Logging::logException($e, 'API error showing campaigns list'); 
      return $this->respondInternalError('An internal error occurred'); 
     } 
    } 

} 

분명히 내 경로가 클라이언트를 바인딩하지 않습니다. $ client의 var_dump가 이것을 보여줍니다. 어디서 잘못 가고 있습니까?

답변

0

Laravel이 나를 위해 client_id를 주입하고있었습니다.

따라서 색인 방법이된다 :

public function index($client_id) 
{ 
    $campaigns = Campaign::where('client_id', $client_id)->get(); 
}