我试图让我的网址有点用户友好,但我无法使用。
我已添加到RouteServiceProvider
这个
Route::bind('items_route', function ($value) {
return \App\Item::where('alias', $value)->firstOrFail();
});
这是我的route.php
Route::get('item/{item}', 'ItemController@show')->name('item.show');
我视图中的按钮
{!! HTML::linkRoute('item.show', 'View', array($item->alias)) !!}
和控制器
public function show( Item $items_route )
{
$reviews = Review::where('item_id', $items_route->id)->where('approved', 1)->get();
$item = Item::with('taggs')->find($items_route->id);
$additionAds = Item::with('taggs')->where('id', '!=', $items_route->id)->get();
if($item) {
$item->views = (int) $item->views +1;
$item->save();
}
$category = Category::find($item->category_id);
if($category->parent_id == 0) {
$ids = Category::select('id')->where('parent_id', $item->category_id)->where('parent_id','!=',0)->get();
$array = array();
foreach ($ids as $id) {
$array[] = (int) $id->id;
}
$items = Item::select('*')->whereIn('category_id',$array)->whereNotIn('id', [$item->id])->get();
} else {
$items = Item::select('*')->where('category_id' ,$item->category_id)->whereNotIn('id', [$item->id])->get();
}
$item_images = Item_Images::where('item_id',$items_route->id)->get();
$defaultCountry = DB::table('items')
->leftJoin('countries', 'items.country_id', '=', 'countries.id')
->where('items.id', $items_route->id)
->select('items.*', 'countries.*')
->first();
return view('item', compact('item','items','item_images','defaultCountry', 'additionAds', 'reviews'));
}
错误是
ItemController.php第40行中的ErrorException: 试图获得非对象的属性
第40行是查询类别$category = Category::find($item->category_id);
的地方。出现错误是因为$item
为空。
谁能告诉我们这里发生了什么?为什么我无法从控制器获取项目和所有属性?
答案 0 :(得分:0)
这种情况正在发生,因为数据库中没有ID = $items_route->id
项,因此此代码将返回null
:
Item::with('taggs')->find($items_route->id);
所以,你需要检查结果:
if (is_null($item)) {
// Do some stuff.
} else {
// Item is not found.
}