亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel 搜索關鍵字查詢

Laravel 搜索關鍵字查詢

PHP
慕尼黑5688855 2023-09-08 16:45:28
因此,目前我已經創建了搜索文本字段來查找數據庫特定列的關鍵字。用這個口才$data = DB::table('product')        ->select('product.id','product.title','product.description','product.content','product.photo','product.quantity','product.price')        ->join('product_per_category','product_per_category.product_id','=','product.id')        ->where(['product.deleted' => 0])        ->where(['product_per_category.deleted' => 0])        ->where(['product_per_category.productcategory_id' => $id])        ->where(function($query) use ($keyword){            $query->where('product.content', 'like', '%' . $keyword . '%')                ->orWhere('product.title', 'like', '%' . $keyword . '%')                ->orWhere('product.quantity', 'like', '%' . $keyword . '%')                ->orWhere('product.price', 'like', '%' . $keyword . '%');        })        ->groupBy('product.id')        ->paginate(10);如果我嘗試搜索234.00Price 的值,與 的列匹配的所有可能值content, title, quantity, price, quantity將自動返回數據。如果我嘗試搜索這樣的關鍵字怎么辦234.00 BooksPrice和的值Title。它現在不會返回任何數據。因為它只會匹配特定列上的這句話。我想做的是如果我搜索這樣的東西= 234.00 Books 20*Value of Price, Title and Quantity它應該返回每列上匹配的所有數據。字母無論小寫還是大寫只要符合字母的位置即可那可能嗎?** 更新 **目標:只想匹配234任何列上的值。成為結果。但我的查詢的問題是,如果我添加另一個類似的關鍵字,234 Books它不會返回任何數據
查看完整描述

2 回答

?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

第一: 提取關鍵詞:


$delimeter = ' '; //or your separator

$keywords = explode($delimeter, $search); // Will return an array containing each keyword

然后:循環每個關鍵字并調用您的搜索查詢或動態擴展您的查詢


示例 像這樣的東西應該可以工作......


$base_query = DB::table('product')

        ->select('product.id','product.title','product.description','product.content','product.photo','product.quantity','product.price')

        ->join('product_per_category','product_per_category.product_id','=','product.id')

        ->where(['product.deleted' => 0])

        ->where(['product_per_category.deleted' => 0])

        ->where(['product_per_category.productcategory_id' => $id]);


foreach($keywords as $keyword){

       $base_query->where(function($query) use ($keyword){

            $query->where('product.content', 'like', '%' . $keyword . '%')

                ->orWhere('product.title', 'like', '%' . $keyword . '%')

                ->orWhere('product.quantity', 'like', '%' . $keyword . '%')

                ->orWhere('product.price', 'like', '%' . $keyword . '%');

            })

}


$result = $base_query->get();

您將需要執行循環,因為您不知道搜索結果中的關鍵字數量


查看完整回答
反對 回復 2023-09-08
?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

你可以像這樣使用explode PHP函數:

$keywords = explode(' ', $keyword); // Will return an array containing each keyword

dd($keywords);

如果您的關鍵字可以包含空格,您可能應該考慮使用其他分隔符或拆分查詢參數。


查看完整回答
反對 回復 2023-09-08
  • 2 回答
  • 0 關注
  • 188 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號