Example #1
0
 /**
  * @param $name
  * @throws \Exception
  * @return mixed
  */
 protected function getRelatedObject($name)
 {
     $relation = $this->table->getRelationInfo($name);
     $tableClassName = $relation['table'];
     /** @var $tableClassName \Uc\Core\Db\Table */
     $table = $tableClassName::instance();
     if ($relation['type'] == $table::RELATION_ONE_TO_ONE) {
         if (!empty($relation['myField'])) {
             $pkField = $this->{$relation['myField']};
             $item = $table->fetchOne($pkField);
         } else {
             $item = $table->fetchOne(array($relation['foreignField'] => $this->pk()));
         }
         return $item;
     } elseif ($relation['type'] == $table::RELATION_ONE_TO_MANY) {
         if (!empty($relation['foreignField'])) {
             $items = $table->fetchAll(array($relation['foreignField'] => $this->pk()));
         } else {
             if (!empty($relation['myField'])) {
                 $items = $this->table->fetchAll(array($relation['myField'] => $this->pk()));
             } else {
                 throw new \Uc\Core\Exception('Not valid relation ' . $name . ' in class ' . get_called_class() . '. Please set myField or foreignField');
             }
         }
         return $items;
     } elseif ($relation['type'] == $table::RELATION_MANY_TO_MANY) {
         $select = $table->select();
         $relatedTableReference = $relation['reference'];
         $select->join('LEFT JOIN ' . $relatedTableReference['tableName'] . ' on ' . $table->getTableName() . '.' . $table->pk() . ' = ' . $relatedTableReference['tableName'] . '.' . $relatedTableReference['foreignField']);
         $select->where($relation['reference']['tableName'] . '.' . $relation['reference']['myField'] . ' = ? ', $this->pk());
         $items = $table->fetchAll($select);
         return $items;
     }
     return false;
 }