路由使用Slug,但功能需要ID

时间:2019-05-06 11:28:54

标签: php laravel laravel-5 route-model-binding

我使用子弹在我的网站中导航,但是我需要将ID连接到子弹才能使用。

功能:

public function categories(Request $request, $slug)
{
    $categories = Category::where('slug', $slug)->get();
    $announcements = Announcement::where('category_id', $request->id)->paginate(5);
    $category_lists = Category::all();
    return view('announcements.index', compact('announcements', 'categories', 'category_lists'));
}

这是我需要获取ID的功能。 $ request-> id无效,因为我的$ request-> id返回'null'。有没有办法获取连接到子弹/数据库行的ID?

如果需要更多信息,请告诉我。

我尝试用它来

$announcements = Announcement::where('category_id', Category::get(id))->paginate(5);

类似的东西,什么都不起作用。

2 个答案:

答案 0 :(得分:1)

将代码更改为

$category = Category::where('slug', $slug)->first();
$announcements = Announcement::where('category_id', $category->id)->paginate(5);

如果一个类别有一个唯一的子弹,只需使用first()而不是get(),就可以获取类别对象并使用它。

答案 1 :(得分:1)

我想您会覆盖getRouteKeyName模型中的Category

public function getRouteKeyName()
{
    return 'slug';
}

然后,您可以通过路由模型绑定来获得Category

public function categories(Request $request, Category $category)
{
    $announcements = Announcement::where('category_id', $category->id)->paginate(5);
    $category_lists = Category::all();
    return view('announcements.index', compact('announcements', 'category', 'category_lists'));
}