2016-08-23 47 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 6.

でクライアントに属しているキャンペーンのリストを返します、私はこのクライアントIDを取得するために結合暗黙のモデルを使用しようとしていますが、私は常に空の結果セットを取得:

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(); 
} 
関連する問題