Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 29 мар 2024, 00:01

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
СообщениеДобавлено: 29 авг 2013, 12:29 
Не в сети
Бывалый

Зарегистрирован: 30 июл 2013, 15:31
Сообщения: 47
Всем привет,
Выбирая данные из таблицы с большим количеством полей я хочу уменьшить число выходных полей
Я пишу:
Код:
  $RegionFactory->select(  array( 'region.id', 'region.name' ) );


Но в запросе вижу, что поля в списке добавляются к выходным полям а не замещают их.
А как правильно заместить все поля на нужные мне ?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 авг 2013, 14:25 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
либо переопределять $_table_columns , хранящую список колонок таблицы http://kohanaframework.org/3.3/guide-ap ... le_columns

либо делать по аналогии с http://kohanaframework.org/3.3/guide-api/ORM#count_all

я делаю два набора значений $_table_columns : короткое и полное, по умолчанию используется сокращенный набор полей, ну и через самописный меток переключаю их: $model->short_list(FALSE\TRUE)

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 авг 2013, 17:13 
Не в сети
Бывалый

Зарегистрирован: 30 июл 2013, 15:31
Сообщения: 47
Спасибо за подсказку!
Хотя у меня получилось немного по иному
Я передавал список полей в конструкторе:
Код:
      $ModelSubregion = new Model_Subregion( '', array( 'overriden_list_columns' => array( 'id', 'name') ) );

Сохранял этот параметр м переопредел метод list_columns :
Код:
class Model_Common extends ORM //Model
{
   protected $overriden_list_columns = '';

   public function __construct( $id = NULL, $parameters= array() )
   {
      if ( !empty($parameters['overriden_list_columns']) ) {
         $this->overriden_list_columns= $parameters['overriden_list_columns'];
      }
      parent::__construct();
   }

   public function list_columns() {
      if ( empty($this->overriden_list_columns) ) {
         return parent::list_columns();
      }
      $current_list_columns= $this->_db->list_columns( $this->_table_name );
      foreach( $current_list_columns as $key=> $current_column ) {
         if ( !in_array($current_column['column_name'], $this->overriden_list_columns) ) {
            unset(  $current_list_columns[$key]  );
         }
      }
      return $current_list_columns;
   }


Я так понял что список полей создается ДО вызова метода find_all - позтому м пришлось передавать его в конструкторе...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 авг 2013, 21:39 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
списки полей надо прописывать в моделях при их создании иначе каждый раз будет лишний запрос в базу для получения описания полей

https://github.com/WinterSilence/kohana ... es/ORM.php либо кешировать эти значения(в коде сейчас костыль дополнительный для принудительного сбора данных), но лучше все-таки явно прописывать

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 30 авг 2013, 10:26 
Не в сети
Бывалый

Зарегистрирован: 30 июл 2013, 15:31
Сообщения: 47
Да в трассировке куча запросов вида :

Код:
SHOW FULL COLUMNS  FROM `bp_region`


тут нашел описание решения этой проблемы http://site-konstruktor.com.ua/cache-table_columns-in-orm-kohana-3_3
Я так понял необходимые поля должны быть описаны полностью ?

И еще подскажите а как вы задаете переключатель если нужен разный набор полей ? В конструкторе как сделано у меня?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 01 сен 2013, 23:10 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
mstdmstd> либо конструктор переопределить(но лучше сделать как у меня), либо несколько моделей сделать(полную\краткую)

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group