我会将两个答案结合起来。作为一种关系,它在技术上是一个嵌套资源。此外,您真正拥有2个RESTful操作:存储和销毁(在Laravel中对应于附加和分离)。您可能还需要一个索引来查看所有关系。我认为“创建”操作是可选的,这取决于您的用户界面。
// Ability_Role pivot routes
Route::resource('v1/user.cards', 'UserCardController')
->only(['index', 'create', 'store','destroy']);
这将给出以下路由:
+
| Domain | Method | URI | Name | Action | Middleware |
+
| | GET|HEAD | v1/user/{user}/cards | user.cards.index | App\Http\Controllers\UserCardController@index | web |
| | POST | v1/user/{user}/cards | user.cards.store | App\Http\Controllers\UserCardController@store | web |
| | GET|HEAD | v1/user/{user}/cards/create | user.cards.create | App\Http\Controllers\UserCardController@create | web |
| | DELETE | v1/user/{user}/cards/{card} | user.cards.destroy | App\Http\Controllers\UserCardController@destroy | web |
+
我选择将路由标记为user.cards,因为我认为您更希望从用户模型开始并附加卡片。
对于store方法,您可以发布一个卡片数组以附加到用户。
如果您还想从卡片开始,并存储一组用户,您也可以定义反向关系(尽管这需要第二个控制器,只有create和store路线)。
// Inverse create and store routes
Route::get('v1/cards/{card}/users/create', 'CardUserController@create')
->name('cards.users.create');
Route::post('v1/cards/{card}/users', 'CardUserController@store')
->name('cards.users.store');
现在你将会添加2条路由:
+--------+----------+------------------------------+--------------------+-------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+------------------------------+--------------------+-------------------------------------------------+------------+
| | GET|HEAD | api/user | api. | Closure | api |
| | | | | | auth:api |
| | POST | v1/cards/{card}/users | cards.users.store | App\Http\Controllers\CardUserController@store | web |
| | GET|HEAD | v1/cards/{card}/users/create | cards.users.create | App\Http\Controllers\CardUserController@create | web |
| | GET|HEAD | v1/user/{user}/cards | user.cards.index | App\Http\Controllers\UserCardController@index | web |
| | POST | v1/user/{user}/cards | user.cards.store | App\Http\Controllers\UserCardController@store | web |
| | GET|HEAD | v1/user/{user}/cards/create | user.cards.create | App\Http\Controllers\UserCardController@create | web |
| | DELETE | v1/user/{user}/cards/{card} | user.cards.destroy | App\Http\Controllers\UserCardController@destroy | web |
+--------+----------+------------------------------+--------------------+-------------------------------------------------+------------+
UsersUsersController
和CardsUsersController
。 - Wahyu Kristianto