/**
  *
  *
  */
 public function buildCacheAreaHasParent(AreaModel $area)
 {
     $statFirstArea = $this->siteContainer['databasehelper']->getPDO()->prepare("SELECT area_information.parent_area_id FROM area_information WHERE area_information.id=:id");
     // get first parent
     $areaParentID = null;
     $statFirstArea->execute(array('id' => $area->getId()));
     $d = $statFirstArea->fetch();
     if ($d) {
         $areaParentID = $d['parent_area_id'];
     }
     $statInsertCache = $this->siteContainer['databasehelper']->getPDO()->prepare("INSERT INTO cached_area_has_parent(area_id,has_parent_area_id) VALUES (:area_id,:has_parent_area_id)");
     $statNextArea = $this->siteContainer['databasehelper']->getPDO()->prepare("SELECT area_information.parent_area_id FROM area_information WHERE area_information.id=:id");
     while ($areaParentID) {
         // insert this parent into the cache
         $statInsertCache->execute(array('area_id' => $area->getId(), 'has_parent_area_id' => $areaParentID));
         // move up to next parent
         $statNextArea->execute(array('id' => $areaParentID));
         $d = $statNextArea->fetch();
         if ($d) {
             $areaParentID = $d['parent_area_id'];
         } else {
             $areaParentID = null;
         }
     }
 }
 protected function build()
 {
     $this->select[] = 'event_information.*';
     if ($this->country) {
         $this->where[] = " event_information.country_id = :country_id ";
         $this->params['country_id'] = $this->country->getId();
     }
     if ($this->area) {
         // We were doing
         // $this->joins[] = " LEFT JOIN cached_area_has_parent ON cached_area_has_parent.area_id = venue_information.area_id";
         // $this->where[] =  " (venue_information.area_id = :area_id OR  cached_area_has_parent.has_parent_area_id = :area_id )";
         // but then we got duplicates
         $areaids = array($this->area->getId());
         $this->statAreas = $this->siteContainer['databasehelper']->getPDO()->prepare("SELECT area_id FROM cached_area_has_parent WHERE has_parent_area_id=:id");
         $this->statAreas->execute(array('id' => $this->area->getId()));
         while ($d = $this->statAreas->fetch()) {
             $areaids[] = $d['area_id'];
         }
         $this->where[] = "  event_information.area_id IN (" . implode(",", $areaids) . ")";
     }
     if ($this->group) {
         $this->joins[] = " JOIN event_in_group AS event_in_group ON event_in_group.event_id = event_information.id " . " AND event_in_group.group_id = :group_id ";
         $this->params['group_id'] = $this->group->getId();
     }
     if ($this->after) {
         $this->where[] = ' event_information.end_at > :after';
         $this->params['after'] = $this->after;
     }
 }
 protected function build()
 {
     $this->select[] = 'area_information.*';
     if ($this->country) {
         $this->where[] = " area_information.country_id = :country_id ";
         $this->params['country_id'] = $this->country->getId();
     }
     if ($this->noParentArea) {
         $this->where[] = ' area_information.parent_area_id IS null ';
     } else {
         if ($this->parentArea) {
             $this->where[] = " area_information.parent_area_id = :parent_id ";
             $this->params['parent_id'] = $this->parentArea->getId();
         }
     }
 }
 /**
  * @param mixed $area
  */
 public function setArea(AreaModel $area)
 {
     $this->area_id = $area->getId();
     $this->area = $area;
 }