Reputation: 128
How do I trigger index
method from nested resources?
For example I have route:
Route::resource('diagrams.steps', 'DiagramStepsController');
I allows URLs like /diagrams/1/steps/3
which triggers show($diagramId, $stepID)
.
I would like to get all steps that belong to the diagram with ID 1: /diagrams/1/steps
.
How do I achieve achieve that?
Upvotes: 0
Views: 87
Reputation: 128
Route::resource('diagrams.steps', 'DiagramStepsController');
Gives me GET|HEAD diagrams/{diagrams}/steps route. It calls index method with argument matching diagrams id: {diagrams}. So in order to get all steps that belongs to navigated diagram i had to write method as follows:
public function index($id)
{
$steps = Step::where('diagram_id', '=', $id)->get();
return Response::json(
array(
'error' => false,
'steps' => $steps
),
200
);
}
Upvotes: 0
Reputation: 44526
The route definition you posted:
Route::resource('diagrams.steps', 'DiagramStepsController');
Should generate the following routes:
+--------+-------------------------------------------------+------------------------+--------------------------------+----------------+---------------+
| Domain | URI | Name | Action | Before Filters | After Filters |
+--------+-------------------------------------------------+------------------------+--------------------------------+----------------+---------------+
| | GET|HEAD diagrams/{diagrams}/steps | diagrams.steps.index | DiagramStepsController@index | | |
| | GET|HEAD diagrams/{diagrams}/steps/create | diagrams.steps.create | DiagramStepsController@create | | |
| | POST diagrams/{diagrams}/steps | diagrams.steps.store | DiagramStepsController@store | | |
| | GET|HEAD diagrams/{diagrams}/steps/{steps} | diagrams.steps.show | DiagramStepsController@show | | |
| | GET|HEAD diagrams/{diagrams}/steps/{steps}/edit | diagrams.steps.edit | DiagramStepsController@edit | | |
| | PUT diagrams/{diagrams}/steps/{steps} | diagrams.steps.update | DiagramStepsController@update | | |
| | PATCH diagrams/{diagrams}/steps/{steps} | | DiagramStepsController@update | | |
| | DELETE diagrams/{diagrams}/steps/{steps} | diagrams.steps.destroy | DiagramStepsController@destroy | | |
+--------+-------------------------------------------------+------------------------+--------------------------------+----------------+---------------+
Notice the very first route is diagrams/{diagrams}/steps
which calls the index
method of your controller, which is what you are asking for.
Upvotes: 2