Example #1
0
 /**
  * Список всех значений фич, которые задействованы в данной категории маркетов
  * @param type $category_id
  * @param type $feature_ids
  * @return type
  */
 public static function getPossibleMarketsValues($category_id, $feature_ids)
 {
     $feature_ids = array_map('intval', $feature_ids);
     $feature_ids_imploded = implode(',', $feature_ids);
     $sql = 'SELECT fv.id, fv.feature_value ' . ' FROM ' . self::tableName() . ' fv ' . ' JOIN ' . FeaturesValuesRelations::tableName() . ' fvr ' . ' ON fv.id = fvr.feature_value_id ' . ' JOIN ' . MarketsFeatures::tableName() . ' mf ' . ' ON fv.id = mf.feature_value_id ' . ' JOIN ' . MarketsCategories::tableName() . ' mc ' . ' ON mc.markets_id = mf.markets_id ' . ' WHERE fvr.feature_id IN (' . $feature_ids_imploded . ') ' . ' AND mc.categories_id = :category_id';
     return self::findBySql($sql, [':category_id' => $category_id])->asArray()->all();
 }
Example #2
0
 /**
  * Get markets with filters by category and features
  * @param int $last_market_id
  * @param string|array $categories_ids
  * @param string|array $features_ids
  * @param int $limit
  * @return array of markets
  */
 public static function getAllByFilters($last_market_id, $categories_ids = 'all', $features_ids = 'all', $limit = 25)
 {
     $select = "SELECT m.id, m.title, m.current_date," . " m.price, m.xrl_price," . " COUNT(mp.id) AS proposes_count," . " (" . "     SELECT mi.thumb_src FROM " . MarketsImages::tableName() . " mi " . "     WHERE m.id = mi.markets_id" . "     LIMIT 1" . " ) as thumb_src ";
     $from = " FROM " . self::tableName() . " m ";
     $join = " LEFT JOIN " . MarketsProposes::tableName() . " mp " . " ON m.id = mp.markets_id ";
     $where = " WHERE m.id > :last_market_id ";
     $group_by = " GROUP BY m.id  ";
     $order_by = " ORDER BY m.id DESC ";
     $limits = " LIMIT :limit ";
     if ($categories_ids != 'all' && is_array($categories_ids)) {
         $categories_ids = array_map('intval', $categories_ids);
         $join .= " JOIN " . MarketsCategories::tableName() . " mc " . " ON m.id = mc.markets_id " . " JOIN " . Categories::tableName() . " c " . " ON c.id = mc.categories_id ";
         $where .= " AND c.id IN (" . implode(',', $categories_ids) . ")";
     }
     $sql = $select . $from . $join . $where . $group_by . $order_by . $limits;
     return static::findBySql($sql, [':limit' => $limit, ':last_market_id' => $last_market_id])->asArray()->all();
 }
Example #3
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getMarketsCategories()
 {
     return $this->hasMany(MarketsCategories::className(), ['markets_id' => 'id']);
 }