Laravel slug不起作用 - 显示相同的记录

时间:2018-04-23 10:05:21

标签: laravel routes slug

我已经定义了slug来查看产品。 slu target目的地工作正常,但所有slu have返回相同的产品(第一个)而不是应该是。

浏览时不显示所需产品。它显示了数据库中的第一条记录。我错过了什么?

我的路线

Route::get('/{slug}/order', 'Controller@order')->name('order')->where('slug', '[\w\d\-]+(.*)');
Route::post('/{slug}/order', 'Controller@order_store')->name('order_store')->where('slug', '[\w\d\-]+(.*)');
Route::get('/{slug}', 'Controller@view')->name('view')->where('slug', '[\w\d\-]+(.*)');

控制器

public function show($slug, request $id)
{
    $item = Item::where('slug', $slug)->firstorfail()->where('status', true)->firstorfail();
    return  view ('products.show',  ['item'=>$item]);
}

查看Blade

<a target="_blank" href="{{ route('view', $item['slug']) }}">View</a>

2 个答案:

答案 0 :(得分:1)

供将来参考:

您不应该在查询构建器上调用firstOrFail()两次。

更改

$item = Item::where('slug', $slug)->firstorfail()->where('status', true)->firstorfail();

$item = Item::where('slug', $slug)->where('status', true)->firstorfail();

答案 1 :(得分:0)

更改路线

Route::get('/{slug}', 'Controller@view')->name('view')->where('slug', '[\w\d\-]+(.*)');
Route::get('/{slug}/order', 'Controller@order')->name('order')->where('slug', '[\w\d\-]+(.*)');
Route::post('/{slug}/order', 'Controller@order_store')->name('order_store')->where('slug', '[\w\d\-]+(.*)');

更改方法

public function show($slug)
{
    $shproduct = Item::where('slug', $slug)->firstorfail()->where('status', true)->firstorfail();
    return  view ('products.show',  ['shproduct'=>$shproduct]);
}