Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

В запросе указать только нужные поля
http://forum.kohanaframework.su/viewtopic.php?f=31&t=740
Страница 1 из 1

Автор:  mstdmstd [ 29 авг 2013, 12:29 ]
Заголовок сообщения:  В запросе указать только нужные поля

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


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

Автор:  WinterSilence [ 29 авг 2013, 14:25 ]
Заголовок сообщения:  Re: В запросе указать только нужные поля

либо переопределять $_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)

Автор:  mstdmstd [ 29 авг 2013, 17:13 ]
Заголовок сообщения:  Re: В запросе указать только нужные поля

Спасибо за подсказку!
Хотя у меня получилось немного по иному
Я передавал список полей в конструкторе:
Код:
      $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 - позтому м пришлось передавать его в конструкторе...

Автор:  WinterSilence [ 29 авг 2013, 21:39 ]
Заголовок сообщения:  Re: В запросе указать только нужные поля

списки полей надо прописывать в моделях при их создании иначе каждый раз будет лишний запрос в базу для получения описания полей

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

Автор:  mstdmstd [ 30 авг 2013, 10:26 ]
Заголовок сообщения:  Re: В запросе указать только нужные поля

Да в трассировке куча запросов вида :

Код:
SHOW FULL COLUMNS  FROM `bp_region`


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

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

Автор:  WinterSilence [ 01 сен 2013, 23:10 ]
Заголовок сообщения:  Re: В запросе указать только нужные поля

mstdmstd> либо конструктор переопределить(но лучше сделать как у меня), либо несколько моделей сделать(полную\краткую)

Страница 1 из 1 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/