2016-05-13 14 views
0

私はjenssegers/laravel-mongodbを使用しています。私が作るスコープLaravel-MongoDB、関連順の表示順

私はMongoDBのjsの例のようスコアフィールドで注文することができますどのように
public function scopeWhereFullText($query, $search) 
    { 
     return $query->whereRaw(['$text' => ['$search' => $search]],['score'=>['$meta'=>'textScore']]); 
    } 

:松葉杖なしのソリューションは何

db.products.find({$text:{$search:"SomeText"}},{score:{$meta:'textScore'}}).sort({score:{$meta:'textScore'}}) 

答えて

0

public function scopeWhereFullText($query, $search) 
{ 
    $query->getQuery()->projections = ['score'=>['$meta'=>'textScore']]; 

    return $query->whereRaw(['$text' => ['$search' => $search]]); 

} 

と結果には

$products = Product::whereFullText($request->get('q','')) 
        ->orderBy('score',['$meta'=>'textScore'])->get(); 

$max = $products->max('score'); 
$min = $products->min('score'); 

$products = $products->filter(function($item) use($max,$min){ 
    return $item->score > ($max+$min)/2; 
});