Exemple #1
0
 public function getAllItems($lastId = 0, $searchTag = "", $userId = false, $limit = false)
 {
     $query = Video::find()->from(["v" => Video::tableName()])->joinWith(['items i'])->andWhere('i.deleted = 0')->orderBy('id DESC');
     // Определяем за какой период будем показывать
     if (!empty($limit)) {
         $query = $query->limit((int) $limit);
     } else {
         $query = $query->limit(100);
     }
     if ($lastId != 0) {
         $query = $query->andWhere('i.id < :id', [':id' => $lastId]);
     }
     if (!empty($userId)) {
         $query = $query->andWhere('i.user_id = :userId', [':userId' => $userId]);
     }
     if (!empty($searchTag)) {
         if (is_array($searchTag)) {
             $tagsId = $searchTag;
         } else {
             $tags = Tags::find()->where(['name' => $searchTag])->all();
             $tagsId = [];
             foreach ($tags as $tag) {
                 $tagsId[] = (int) $tag->id;
             }
         }
         if (count($tagsId) > 0) {
             $query = $query->andWhere('(SELECT COUNT(*) as tagCount FROM `' . TagEntity::tableName() . '` te WHERE te.entity = "' . TagEntity::ENTITY_ITEM . '" AND te.entity_id = i.id  AND te.tag_id IN (' . join(',', $tagsId) . ')) > 0');
         }
     }
     return $query->all();
 }