Laravel 7.14 在搜索具有关系的数据表后为产品构建链接



我有一个 laravel 7.14 应用程序。

我正在尝试根据品牌名称=查询获取搜索结果。

问题在于构建链接以显示单个产品。它需要品牌鼻涕虫而不是产品鼻涕虫。当我使用品牌名称搜索时,我得到了所需的结果,但要查看单个产品链接会获取品牌 slug 而不是产品 slug。如果我从品牌表中删除 slug,则在显示结果时出现错误。

我的产品表brand_id了产品中标记品牌的内容。在品牌表中,我有"名称"和"蛞蝓"。

产品领域:

'image',
'title',
'slug',
'description',
'brand_id',
'category_id',

品牌字段:

'name',
'slug',

这是我在产品控制器中的搜索:

public function search(Request $request)
{
$validator = Validator::make($request->all(), [
'query' => 'required|min:3',
]);
if ($validator->fails()) {
return back()->with('toast_error', 'Please enter at least 6 character');
}
$query = $request->input('query');
$products = Product::where('title', 'like', "%$query%")
->orWhere('molecules', 'like', "%$query%")
->orWhere('text', 'like', "%$query%")
->join('brands', 'brands.id', '=', 'brand_id')
->orWhere('name', 'like', "%$query%")->paginate(10);
// Search with paginate
// $products = Product::search("%$query%")
//             ->paginate(20);
$categories = Category::all();
$brands = Brand::all();
return view('products.search')->with([
'products' => $products,
'categories'=> $categories,
'brands' => $brands,
]);
}

只需为查询中的一个 slug 列提供别名。例如

$products = Product::select('products.*', 'brands.name', 'brands.slug as brand_slug')
->where('title', 'like', "%$query%")
->orWhere('molecules', 'like', "%$query%")
->orWhere('text', 'like', "%$query%")
->join('brands', 'brands.id', '=', 'brand_id')
->orWhere('name', 'like', "%$query%")->paginate(10);

最新更新