我正在嘗試撰寫一個查詢來搜索 mongodb 資料庫中的特定查詢并回傳相關資訊,這是我到目前為止所做的:在帖子中:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Jenssegers\Mongodb\Eloquent\Model;
class Post extends Model
{
use HasFactory;
protected $connection = 'mongodb';
protected $collection = 'post';
protected $fillable = [
'STATUS',
'DDC_CODE',
'TRADE_NAME',
'SCIENTIFIC_CODE',
'SCIENTIFIC_NAME',
'INGREDIENT_STRENGTH',
'DOSAGE_FORM_PACKAGE',
'ROUTE_OF_ADMIN',
'PACKAGE_PRICE',
'GRANULAR_UNIT',
'MANUFACTURER',
'REGISTERED_OWNER',
'UPDATED_DATE',
'SOURCE'
];}
在 PostController 中:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Post;
class PostController extends Controller
{
public function home() {
$posts = Post::paginate(4);
return view('home', compact('posts'));
}
public function search(Request $request){
if(isset($_GET['query'])){
$search_text=$_GET['query'];
$searchs=Post::whereRaw(array('$text'=>array('$search'=> $search_text)))->get();;
return view('search',['searchs'=>$searchs]);
}
else{
return view('search');
}
}
}
和 search.blade.php:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Laravel search</title>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-6" style="margin-top:40px">
<h4>Search Everything</h4><hr>
<form action="{{ route('web.search')}}" method="GET">
<div class="form-group">
<label for="">Enter keyword</label>
<input type="text" class="form-control" name="query" placeholder="Search here...">
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Search</button>
</div>
</form>
<br>
<br>
<hr>
<br>
<table border = "1">
<tr>
<td>STATUS</td>
<td>DDC_CODE</td>
<td>TRADE_NAME</td>
<td>SCIENTIFIC_CODE</td>
<td>SCIENTIFIC_NAME</td>
<td>SCIENTIFIC_CODE</td>
<td>INGREDIENT_STRENGTH</td>
<td>DOSAGE_FORM_PACKAGE</td>
<td>ROUTE_OF_ADMIN</td>
<td>PACKAGE_PRICE</td>
<td>GRANULAR_UNIT</td>
<td>MANUFACTURER</td>
<td>UPDATED_DATE</td>
<td>SOURCE</td>
</tr>
@foreach ($searchs as $search)
<tr>
<td>{{ $search['STATUS'] }}</td>
<td>{{ $search['DDC_CODE'] }}</td>
<td>{{ $search['TRADE_NAME'] }}</td>
<td>{{ $search['SCIENTIFIC_CODE'] }}</td>
<td>{{ $search['SCIENTIFIC_NAME'] }}</td>
<td>{{ $search['INGREDIENT_STRENGTH'] }}</td>
<td>{{ $search['DOSAGE_FORM_PACKAGE'] }}</td>
<td>{{ $search['ROUTE_OF_ADMIN'] }}</td>
<td>{{ $search['PACKAGE_PRICE'] }}</td>
<td>{{ $search['GRANULAR_UNIT'] }}</td>
<td>{{ $search['MANUFACTURER'] }}</td>
<td>{{ $search['REGISTERED_OWNER'] }}</td>
<td>{{ $search['UPDATED_DATE'] }}</td>
<td>{{ $search['SOURCE'] }}</td>
</tr>
@endforeach
</table>
</body>
</html>
還有路由處理程式 web.php:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PostController;
Route::get('/', function () {
return view('welcome');
});
Route::get('view','App\Http\Controllers\PostController@home');
Route::get('/search',[PostController::class,'search'])-
>name('web.search');
當我出于某種原因運行代碼時,它給了我一個MongoDB\Driver\Exception\CommandException text index required for $text query 使用的查找方法可能是錯誤的,正確的選擇是什么?連接本身也沒有問題,因為 postController 中的 home 方法運行完美。任何和所有的幫助表示贊賞。
uj5u.com熱心網友回復:
當您呼叫沒有查詢的頁面時,缺少 $searchs 變數。您要么必須在設定了 $searchs 變數的 else 分支中回傳搜索視圖:
// ...
else {
return view('search',['searchs' => []);
}
或在刀片檔案中添加條件:
@if(isset($searchs))
@foreach($searchs as $search)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/476999.html
標籤:php 拉拉维尔 mongodb mongodb查询 laravel-刀片
上一篇:如何對Laravel集合進行分頁
下一篇:如何驗證陣列?(拉拉維爾)
