Laravel 路由模型与自定义键绑定

问题描述 投票:0回答:1

我在 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 变量始终为空。

我尝试了什么?

  1. FavouriteController.php
    文件中使用 getRouteKeyName()
public function getRouteKeyName(): string
{
    return 'user_id';
}
  1. 直接在api.php文件中定义键名
Route::apiResource('favourites', FavouriteController::class)->only(['index', 'store', 'destroy'])->parameters(['favourite' => 'favourite:user_id']);
  1. 拆分api.php文件中的路由
Route::apiResource('favourites', FavouriteController::class)->only(['index', 'store']);
Route::get('favourites/{favourites:user_id}', [FavouriteCountroller::class, 'destroy'])

但似乎没有任何作用。我的控制器中收藏夹的返回始终为空。

有什么想法可能是错的吗?预先感谢

php laravel eloquent model binding
1个回答
0
投票

Laravel 不能很好地“开箱即用”地使用具有复合主键的模型。尽管您说您的表没有主键,但隐含地您有一个使用两列的复合键。

如果您想利用路由模型绑定,最简单的解决方案是将

id
自动增量主键列添加到
favourites
表中,并将最喜欢的关系的
id
传递给 URL。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.