使用名称或描述或属性搜索产品 - 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 value
或 name
或 description
的产品,例如 $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();
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 value
或 name
或 description
的产品,例如 $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();