使用名称或描述或属性搜索产品 - Laravel

product search with name or description or attribute - Laravel

Laravel 的新手。我有以下表格。

products (
 id
)

attributes (
    id,
   name
)

attribute_values(
    id,
    attribute_id,
    value
)


products_attributes (
    product_id,
    attribute_value_id
)

我可以获取产品详细信息及其类别属性名称和值。(它也有翻译)现在需要执行搜索操作。

(变体是 attribute_values)

 $products = Product::whereHas('variations', function ($query)  use($search_txt) {
                $query->where('value','like', $search_txt);
             })->get();


  $product= product::whereTranslationLike('name', '%'.$search_txt.'%')
           ->orwhereTranslationLike('description', '%'.$search_txt.'%')
           ->get();
            

单独写了查询,不知道如何让它协同工作。

谁能帮我举个例子?

据我了解,您可以将这两个查询结合起来

$product= product::whereTranslationLike('name', '%'.$search_txt.'%')
           ->orwhereTranslationLike('description', '%'.$search_txt.'%')
           ->whereHas('variations', function ($query)  use($search_txt) {
                $query->where('value','like', $search_txt);
             })->get();

如果不起作用请告诉我

如果我对你的理解是正确的,你想找到任何 where 语句成功时的值。诀窍是在所有附加 where 语句中使用 OR,如下所示:

$products = Product
        ::whereHas('variations', function ($query)  use($search_txt) {
            $query->where('value','like', $search_txt);
        })
        ->orWhereTranslationLike('name', '%'.$search_txt.'%')
        ->orwhereTranslationLike('description', '%'.$search_txt.'%')
        ->get();

这样您会找到匹配 variation valuenamedescription 的产品,例如 $search_text

您可能希望对翻译条件集进行分组。

$products = Product::whereHas('variations', fn ($q) => $q->where('value', 'like', $search_txt))
    ->orWhere(fn ($q) => $q->whereTranslationLike('name', '%'. $search_txt .'%')
        ->orWhereTranslationLike('description', '%'. $search_txt .'%'))
    ->get();

现在它的工作我改变如下。

$product = Product::with('variations')->whereHas('variations', function ($query)  use($search_txt) {
                $query->where('value','like', $search_txt);
             })->orwhereTranslationLike('name', '%'.$search_txt.'%')
             ->orwhereTranslationLike('description', '%'.$search_txt.'%')->get();