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

Как в запрос с join-ом добавть поле связанной таблицы
http://forum.kohanaframework.su/viewtopic.php?f=31&t=717
Страница 1 из 1

Автор:  mstdmstd [ 03 авг 2013, 16:22 ]
Заголовок сообщения:  Как в запрос с join-ом добавть поле связанной таблицы

Всем привет,
Считываю данные с фильтром также по связанной таблице
Код:
      $TourFactory = ORM::factory('tour');
      if ( !empty($filters['name']) ) {
         $TourFactory->where_open();
         $TourFactory->where('tour.name', ' like ', "%".$filters['name']."%" );
         $TourFactory->or_where('tour.descr', ' like ', "%".$filters['name']."%" );
                 $TourFactory->or_where('region.name', ' like ', "%".$filters['name']."%" ); // фильтр также по связанной таблице
         $TourFactory->where_close();
      }
                ...
      $tour_result= $TourFactory  ->join('region') ->on('region.id', '=' , 'tour.region_id')  ->find_all();

Все работает за исключением того что я не нашел как в выходные поля добавить" region.name as region_name " ?

Автор:  WinterSilence [ 03 авг 2013, 16:38 ]
Заголовок сообщения:  Re: Как в запрос с join-ом добавть поле связанной таблицы

в select(), это вроде как логично или в where( mixed $column , string $op , mixed $value ) - mixed $column required - Column name or array($column, $alias) or object

$TourFactory->where_open(); и $TourFactory->where_close(); в данном случае ни к чему

Автор:  mstdmstd [ 03 авг 2013, 16:56 ]
Заголовок сообщения:  Re: Как в запрос с join-ом добавть поле связанной таблицы

WinterSilence писал(а):
в select(), это вроде как логично или в where( mixed $column , string $op , mixed $value ) - mixed $column required - Column name or array($column, $alias) or object

Если писать
Код:
 ->select('`region.name` as region_name')

То ошибка в том что ORM ставит разделитель "`" вокруг всего выражения и получается ошибка
Код:
 SELECT `bp_``region`.`name`` as region_name`


Можно ли заставить ORM не ставить разделитель "`" автоматом а писать его самому ?

Автор:  mstdmstd [ 03 авг 2013, 16:59 ]
Заголовок сообщения:  Re: Как в запрос с join-ом добавть поле связанной таблицы

Там 2 таблицы имеют поле name

Автор:  WinterSilence [ 03 авг 2013, 17:02 ]
Заголовок сообщения:  Re: Как в запрос с join-ом добавть поле связанной таблицы

mstdmstd ага, насчет префиксов это я тупанул, а насчет селекта смотри мануал, нечего гадать на кофейной гуще

лучше подобные вещи реализовывать в виде методов модели:
Код:
// Model_Tour:
public function find_by_name($name)
{
   $name = "%{$name}%";
   return $this->select(array('region.name', 'region_name'))
            ->where('tour.name', 'LIKE', $name)
            ->or_where('tour.descr', 'LIKE', $name)
            ->or_where('region.name', 'LIKE', $name)
            ->join('region')
            ->on('region.id', '=', 'tour.region_id')
            ->find_all();
}

а еще лучше вместо join использовать связи между моделями:

Код:
protected $_has_many = array(
   // Access groups
   'groups' => array(
      'model' => 'Group',
      'through' => 'users_groups',
   ),
);

public function groups($active = TRUE, $as_array = TRUE)
{
   if ($active)
   {
      $groups = $this->groups->where('active', '=', 1)->find_all();
   }
   else
   {
      $groups = $this->groups->find_all();
   }
   return ($as_array ? $groups->as_array() : $groups);
}

Автор:  mstdmstd [ 03 авг 2013, 17:13 ]
Заголовок сообщения:  Re: Как в запрос с join-ом добавть поле связанной таблицы

Вот так проконало:
Код:
 ->select( DB::expr('`bp_region`.`name` as region_name') )

Только префикс таблиц надо щас тянуть из конфы database

Автор:  WinterSilence [ 03 авг 2013, 17:22 ]
Заголовок сообщения:  Re: Как в запрос с join-ом добавть поле связанной таблицы

буратино был тупой..тупой как дрова...

Автор:  mstdmstd [ 03 авг 2013, 17:30 ]
Заголовок сообщения:  Re: Как в запрос с join-ом добавть поле связанной таблицы

WinterSilence писал(а):
буратино был тупой..тупой как дрова...

?

Автор:  mstdmstd [ 03 авг 2013, 17:33 ]
Заголовок сообщения:  Re: Как в запрос с join-ом добавть поле связанной таблицы

И как кстати получить префикс таблиц ? С наскоку не получилась...

Автор:  mstdmstd [ 04 авг 2013, 09:00 ]
Заголовок сообщения:  Re: Как в запрос с join-ом добавть поле связанной таблицы

mstdmstd писал(а):
И как кстати получить префикс таблиц ? С наскоку не получилась...

отвечу сам себе :
Код:
      $default_db= Database::instance('default');
      $table_prefix = $default_db->table_prefix();

Спасибо за помощь!

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