[英]other conditions does not work with full text search in laravel and mysql
我已經在 laravel 和 mysql 中實現了全文搜索,並且工作正常,但是當嘗試在與全文索引無關的字段(例如狀態和類型“它們存儲為枚舉”)的查詢中放置條件時出現問題.我正在嘗試選擇 type = image 和 status = 1 的產品,但結果包含所有類型的產品以及與全文搜索匹配的任何狀態。
這里是查詢
Product::accepted()
->select('products.id as id','products.type','products.display_image as display_path',
'products.watermark',
DB::raw("concat('[', group_concat(JSON_OBJECT('id', keywords.id , 'keyword',keywords.keyword)
order by keywords.id separator ','), ']') as keywords"))
->join('products_keywords','products_keywords.product_id','products.id')
->join('keywords','keywords.id','products_keywords.keyword_id')
->whereRaw(
"products.type = ?
AND MATCH(keywords.keyword) AGAINST(? IN BOOLEAN MODE)
OR MATCH(products.description) AGAINST(? IN BOOLEAN MODE)
Or MATCH(products.description_en) AGAINST(? IN BOOLEAN MODE)",
['image',$searchTerms,$searchTerms,$searchTerms])
->groupBy('products.id')->groupBy('products.display_image')
->groupBy('products.type')->groupBy('products.watermark')
->paginate(50);
Accepted 是產品模型中的范圍函數,它實現了條件 status = 1
public function scopeAccepted($query)
{
return $this->where('products.status','1');
}
問題看起來像原始 sql 部分中的第一個OR
正在否定所有先前的where
屬性。 您可以將AND
之后的所有內容包裝到一組括號中。
你可能想改變
->whereRaw(
"products.type = ?
AND MATCH(keywords.keyword) AGAINST(? IN BOOLEAN MODE)
OR MATCH(products.description) AGAINST(? IN BOOLEAN MODE)
Or MATCH(products.description_en) AGAINST(? IN BOOLEAN MODE)",
['image',$searchTerms,$searchTerms,$searchTerms])
至
->whereRaw(
"products.type = ?
AND (MATCH(keywords.keyword) AGAINST(? IN BOOLEAN MODE)
OR MATCH(products.description) AGAINST(? IN BOOLEAN MODE)
Or MATCH(products.description_en) AGAINST(? IN BOOLEAN MODE))",
['image',$searchTerms,$searchTerms,$searchTerms])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.