/** * @param arJoin $statement * * @return string */ public function getSaveTableName(arJoin $statement) { $table_name = $statement->getTableName(); if (in_array($table_name, $this->table_names)) { $vals = array_count_values($this->table_names); $next = $vals[$table_name] + 1; $statement->setFullNames(true); $statement->setIsMapped(true); return $table_name . '_' . $next; } else { return $table_name; } }
/** * @param string $type * @param $tablename * @param $on_this * @param $on_external * @param array $fields * @param string $operator * @param bool $both_external * * @return $this * @throws arException */ protected function join($type = arJoin::TYPE_INNER, $tablename, $on_this, $on_external, $fields = array('*'), $operator = '=', $both_external = false) { if (!$this->getAR()->getArFieldList()->isField($on_this) and !$both_external) { throw new arException(arException::LIST_JOIN_ON_WRONG_FIELD, $on_this); } $full_names = false; foreach ($fields as $field_name) { if ($this->getAR()->getArFieldList()->isField($field_name)) { $full_names = true; break; } } $arJoin = new arJoin(); $arJoin->setType($type); $arJoin->setFullNames($full_names); $arJoin->setTableName($tablename); $arJoin->setOnFirstField($on_this); $arJoin->setOnSecondField($on_external); $arJoin->setOperator($operator); $arJoin->setFields($fields); $arJoin->setBothExternal($both_external); $this->getArJoinCollection()->add($arJoin); foreach ($fields as $field) { $arSelect = new arSelect(); $arSelect->setTableName($arJoin->getTableNameAs()); $arSelect->setFieldName($field); $arSelect->setAs($arJoin->getTableNameAs() . '_' . $field); $this->getArSelectCollection()->add($arSelect); } return $this; }