src/Service/HotelMongo.php line 52

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use App\Interfaces\HotelMongoInterface;
  4. use MongoDB\Client;
  5. use MongoDB\Collection;
  6. use MongoDB\Database;
  7. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  8. class HotelMongo implements HotelMongoInterface
  9. {
  10.     /** @var Client  */
  11.     private $conn;
  12.     /** @var  Database */
  13.     private $db;
  14.     /** @var Collection */
  15.     private $collection;
  16.     public function __construct(ParameterBagInterface $bag){
  17.         $this->conn = new Client($bag->get('hotels_mongo_url'));
  18.         $this->db $this->conn->selectDatabase($bag->get('hotels_mongo_db'));
  19.     }
  20.     public function select(string $collection){
  21.         $this->collection  =  $this->db->selectCollection($collection);
  22.     }
  23.     public function findAll(){
  24.         return $this->findBy([]);
  25.     }
  26.     public function findBy(array $criteria$limit null$offset null$sort null$dir 'asc'){
  27.         $dir $dir == 'asc' : -1;
  28.         $options = [];
  29.         if(!empty($limit)){
  30.             $options["limit"] = (int)$limit;
  31.         }
  32.         if(!empty($offset)){
  33.             $options["skip"] = (int)$offset;
  34.         }
  35.         if(!empty($sort)){
  36.             $options['sort'] = [
  37.                 $sort => $dir
  38.             ];
  39.         }
  40.         $results $this->collection->find($criteria$options);
  41.         if(empty($results)){
  42.             return [];
  43.         }
  44.         $results $results->toArray();
  45.         $data = [];
  46.         foreach ($results as $result){
  47.             $data[] = iterator_to_array($result);
  48.         }
  49.         return $data;
  50.     }
  51.     public function updateOneFromJson($json$collection){
  52.         $data json_decode($jsontrue);
  53.         $id array_shift($data);
  54.         $this->select($collection);
  55.         $hotel $this->collection->find(["id" => $id]);
  56.         if(!empty($hotel->toArray())){
  57.             $this->collection->updateOne(["id" => $id],['$set' => $data]);
  58.         }
  59.     }
  60.     public function updateOneFromArray(string $id, array $data,string $collectionName){
  61.         $collection $this->db->selectCollection($collectionName);
  62.         $item $collection->find(["id" => $id]);
  63.         if(!empty($item->toArray())){
  64.             $collection->updateOne(["id" => $id],['$set' => $data]);
  65.         }
  66.     }
  67.     public function updateManyFromArray(string $id, array $data,string $collectionName){
  68.         $collection $this->db->selectCollection($collectionName);
  69.         $collection->updateMany([],$data);
  70.     }
  71.     public function count($criteria = []){
  72.         $result $this->collection->count();
  73.         if(!empty($criteria)){
  74.             $result $this->collection->countDocuments($criteria);
  75.         }
  76.         return $result;
  77.     }
  78.     public function findByKey($key,$value){
  79.         $result $this->collection->find([$key => $value]);
  80.         return $result->toArray();
  81.     }
  82.     public function findByRating(){
  83.         $collection $this->db->selectCollection("hotels_ru");
  84.         $criteria = ['$and' =>[ ['$or' => [['deleted' => false],['is_closed'=>false]]], ["reviews.rating" => ['$lt' => ]]]];
  85.         $items $collection->countDocuments($criteria);
  86.         $k 777;
  87.     }
  88.     public function mongoIn($params){
  89.         if(isset($params["search"])){
  90.             unset($params["search"]);
  91.         }
  92.         if(isset($params["page"])){
  93.             unset($params["page"]);
  94.         }
  95.         if(!empty($params) && isset($params[0]["search"])){
  96.             unset($params[0]);
  97. //            unset($params["id"]);
  98.             unset($params["locale"]);
  99.         }
  100.         $criteria = ['$and' =>[ ['$or' => [['deleted' => false],['is_closed'=>false]]]]];
  101.         $subCriteria = [];
  102.         if(count($params) > 1){
  103.             $item = [];
  104.             foreach ($params as $key=>$param){
  105.                 foreach ($param as &$p){
  106.                     if(intval($p)){
  107.                         $p intval($p);
  108.                     }
  109.                 }
  110.                 if($key == "rating"){
  111.                     $item[]["reviews.rating"] = ['$gte'=> $p];
  112.                 } else{
  113.                     $item[][$key] = ['$in' => $param];
  114.                 }
  115.             }
  116.             $subCriteria['$and'] = $item;
  117.         } else {
  118.             foreach ($params as $key=>$param){
  119.                 foreach ($param as &$item){
  120.                     if(intval($item)){
  121.                         $item intval($item);
  122.                     }
  123.                 }
  124.                 if($key == "rating"){
  125.                     $subCriteria["reviews.rating"] = ['$gt'=> $item];
  126.                 } else{
  127.                     $subCriteria[$key] = ['$in' => $param];
  128.                 }
  129.             }
  130.         }
  131.         if(!empty($subCriteria)){
  132.             array_push($criteria['$and'],$subCriteria);
  133.         }
  134.         return $criteria;
  135.     }
  136.     public function dropCollection($collectionName){
  137.         $this->db->dropCollection($collectionName);
  138.     }
  139.     public function search(string $searchstring $collectionNamestring $fieldName){
  140.         $collection $this->db->selectCollection($collectionName);
  141.         if(empty($search)){
  142.             return [];
  143.         }
  144.         $search '^'.$search.'';
  145.         $result $collection->find([$fieldName =>['$regex'=>$search,'$options' => 'i'], "country_code" => "RU"]);
  146.         return $result->toArray();
  147.     }
  148. }