Laravel 路由仅在 URL 中显示一个 ID,即使 table 中不存在该 ID

Laravel routing shows only one ID in URL even if that ID doesn't exist in the table

在我的边栏中,我列出了默认城市。当我点击每个城市时,我会从某些 API 获得该城市的一些数据。那部分有效。在同一个侧边栏中,我还有最喜欢的城市列表,注册用户可以根据需要将这些城市添加到该列表中,稍后他们只需单击它们就可以获取他们最喜欢的城市的一些数据。听起来很简单,但这部分不起作用。问题是 Laravel 路由系统只从我的收藏夹 table 中为列表中的每个最喜欢的城市获取一个 ID。

这是路线:

Route::get('/favorites/{id}/', 'FavoriteController@show')->name('showFavoriteWeather');

这是控制器:

    public function show($id){

            $favorite_city = Favorite::find($id);

            // dd($favorite_city);

            $api_key = "";  
            $url = "api.openweathermap.org/data/2.5/group?id=$favorite_city->city_id&units=metric&appid=$api_key"; 
            $ch = curl_init($url);
            curl_setopt($ch,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $json_response = curl_exec($ch);

            $data = json_decode($json_response, true);

            // dd($data);

            return view('showFavoriteWeather', compact('data'));
        }

最喜欢的城市在边栏中列出得很好,但每个 link 的 URL 是相同的:localhost:8000/favorites/3

ID 始终是 3,棘手的部分是我的收藏夹 table 中实际上没有任何具有该 ID 的东西。我一天前删除了那一行。所以我的问题是,为什么我最喜欢的城市在 URL 中只显示 ID 3?我使用的数据库是 MySQL.

除此之外,当我手动将 URL 中的 ID 3 更改为 1 2 或我数据库中的任何其他数据,一切正常 - 我获得了我选择的城市所需的数据。

blade 中组装 link 无效的代码如下所示:

<ul>
@foreach ($favorites as $key => $favorite)               
    <li><a href="{{ route('showFavoriteWeather', $id) }}">{{ $favorite->city_name }}</a></li>  
@endforeach
</ul>

你的 href 应该是这样的:

<a href="{{ route('showFavoriteWeather', $favorite->id) }}">

您只是按照您的方式传入 $id,您需要获取 foreach 循环的实际迭代对象的 ID。