Laravel中嵌套资源中的模型绑定

时间:2016-08-23 12:34:00

标签: php angularjs laravel

我正在使用Angular中的前端应用程序在Laravel中构建一个RESTful api。

我有很多型号/控制器和路线。我正在努力设法为嵌套资源创建宁静的路径。

例如,我显示客户列表的路线很简单:

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

客户可以拥有多个广告系列:

class Client extends Model
{

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

}

我不需要显示所有广告系列的路线,但我确实需要一条路线来显示基于客户的所有广告系列。

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

我的意图是Angular应用程序请求的端点是:

myapp/api/clients/6/campaigns

在哪里' 6'是客户端ID。这将返回属于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显示了这一点。 我哪里错了?

1 个答案:

答案 0 :(得分:1)

对于遇到此问题的任何人--Laravel正在为我注入client_id。

因此索引方法变为:

# sudo rpm --nodeps -ivh python-2.6.6-51.el6.x86_64.rpm