laravel 7.14 在使用关系搜索数据表后为产品构建链接

Posted

技术标签:

【中文标题】laravel 7.14 在使用关系搜索数据表后为产品构建链接【英文标题】:laravel 7.14 build link for product after searching datatable with relation 【发布时间】:2020-10-03 09:01:22 【问题描述】:

我有一个 laravel 7.14 应用程序。

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

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

我的产品表有brand_id,它标记了产品中的品牌。在品牌表中,我有“名称”和“蛞蝓”。

产品领域:

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

品牌领域:

'name',
'slug',

这是我在 ProductsController 中的搜索:

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,
    ]);

【问题讨论】:

【参考方案1】:

只需为查询中的 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);

【讨论】:

以上是关于laravel 7.14 在使用关系搜索数据表后为产品构建链接的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 数据表搜索嵌套关系

如何使用 spatie/laravel-query-builder 过滤/搜索具有关系的数据? (拉拉维尔)

Laravel:搜索关系数据

在 laravel 中搜索查询并计算结果的多对多关系

Laravel 关系搜索

在最近的关系记录中搜索 - Laravel (Eloquent)