Laravel多对多关联路由问题:属性读取错误及内容不更新
Laravel路由与关联查询问题
初始问题:访问商品链接触发“Attempt to read property 'alias' on null”错误
路由配置
Route::get('catalog/{catname}', [MainController::class, 'getCatalog'])->name('catalog.page'); Route::get('catalog/{catname}/{alias}', [MainController::class, 'getItemsForList'])->name('catalog.view.item');
错误场景
点击链接 /catalog/table/table-black-and-white 时,抛出错误:
Attempt to read property "alias" on null
多对多模型关联
Catalog 模型
namespace App\Models; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class Catalog extends Model { public function items() : BelongsToMany { return $this->belongsToMany(Item::class); } }
Item 模型
namespace App\Models; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class Item extends Model { public function catalogs() : BelongsToMany { return $this->belongstoMany(Catalog::class); } }
控制器方法实现
public function getCatalog($alias) { $cats = Catalog::where('alias', $alias)->first(); $cats->items; return view('template.sait.page.catalog', compact('cats'))->with('alias', $alias); } public function getItemsForList($alias) { $data = Item::where('alias', $alias)->with('catalogs')->first(); return view('template.sait.page.catalog.view', compact('data'))->with('alias', $alias); }
视图中生成链接的代码
@foreach($cats->items as $item) ..... ..... <a href="{{route('catalog.view.item', $item->alias)}}">env</a> @endforeach
2024.01.20更新:商品页面内容不随地址栏变化
问题现象
分类数据可正常展示,但进入商品页面时,地址栏会随选择的商品变化,页面内容却始终固定不变。例如:
- 访问
www/catalogs/table/table-red-white-color时显示红桌内容 - 访问同分类下的
www/catalogs/table-blue-black-color,地址栏正确,但页面仍显示红桌内容
当前使用的商品查询代码
$item = Item::whereHas('catalogs', function ($catalogs) use($alias){ $catalogs->where('alias', $alias); })->with('catalogs') ->firstOrFail(); if (!$item){ abort(404, 'Page Not found'); } dd($items);
内容的提问来源于stack exchange,提问作者Yura Lons
相关产品推荐
相关产品推荐

