我在 laravel 11 中遇到路由模型绑定问题。无论我尝试什么,响应始终保持为空。
我有什么
我有一个看起来像这样的数据库表:
* ------------------- *
| favourites |
* ------------------- *
| user_id |
| favourite_user_id |
* ------------------- *
我没有主键,因为它只是两个不同用户之间的关系,并且该关系只需要通过user_id列来查询。
在我的 api.php 文件中,我按以下方式定义了路由:
Route::apiResource('favourites', FavouriteController::class)->only(['index', 'store', 'destroy']);
在我的 FavouritesController.php 文件中,我将销毁方法定义为:
public function destroy(Request $request, Favourite $favourite)
{
return [$favourite];
}
php artisan route:list
的输出带来:
GET|HEAD api/favourites
POST api/favourites
DELETE api/favourites/{favourite}
我需要什么?
我想在我的 api 端点的
{favourite}
变量上使用路由模型绑定。由于该表没有 id 列,而是有 user_id,因此我尝试了各种方案,但没有一个有效。 destroy方法中的
$favourite
变量始终为空。
我尝试了什么?
FavouriteController.php文件中使用
getRouteKeyName()
public function getRouteKeyName(): string
{
return 'user_id';
}
Route::apiResource('favourites', FavouriteController::class)->only(['index', 'store', 'destroy'])->parameters(['favourite' => 'favourite:user_id']);
Route::apiResource('favourites', FavouriteController::class)->only(['index', 'store']);
Route::get('favourites/{favourites:user_id}', [FavouriteCountroller::class, 'destroy'])
但似乎没有任何作用。我的控制器中收藏夹的返回始终为空。
有什么想法可能是错的吗?预先感谢
Laravel 不能很好地“开箱即用”地使用具有复合主键的模型。尽管您说您的表没有主键,但隐含地您有一个使用两列的复合键。
如果您想利用路由模型绑定,最简单的解决方案是将
id
自动增量主键列添加到 favourites
表中,并将最喜欢的关系的 id
传递给 URL。