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

Как выполнить SELECT UUID(); по кохановски?
http://forum.kohanaframework.su/viewtopic.php?f=33&t=646
Страница 1 из 1

Автор:  nkl [ 17 май 2013, 14:56 ]
Заголовок сообщения:  Как выполнить SELECT UUID(); по кохановски?

Как выполнить такой запрос?
Код:
SELECT UUID();

Оказывается, MySQL сам может генерить этот UUID. Причем, используя его, UUID генерируется действительно последовательно, а не как в сторонних php-хелперах для KO. Делал 2 совершенно разных функции, по заверению разработчиков которых, генерируется именно последовательный UUID, как по RFC, а на практике нихера! Все записи пишутся вперемешку. Последняя добавленная может вставиться в середину структуры или вообще в начало. А если 20к записей и нужно добавить еще одну и она добавляется в самое начало. Мускул перелопатит всю таблицу на одну запись, а если таких записей 3 добавиться в цикле, так это вообще караул кричать можно, особенно всели одна в конец, вторая в начало, а третья в середину...

Автор:  nkl [ 17 май 2013, 16:12 ]
Заголовок сообщения:  Re: Как выполнить SELECT UUID(); по кохановски?

Создал вот такую модель:
Код:
<?php defined('SYSPATH') or die('No direct script access.');

class Model_Uuid {
   
   public function generate()
   {
      $query = "SELECT UNHEX( REPLACE( UUID( ) ,  '-',  '' ) )";
      
      $uuid = DB::query(Database::SELECT, $query)
         -> execute();
      return $uuid;
   }
}

Но Кохана говорит, что возвращается не массив а Object of class Database_MySQL_Result. И действительно, выполнив запрос через phpmyadmin возвращается 0 строк, и вот такое фот значение 'f4590b65bee111e2879fb4b52f77e6ff'. Как мне это дело в переменную php присвоить?

Автор:  nkl [ 17 май 2013, 16:46 ]
Заголовок сообщения:  Re: Как выполнить SELECT UUID(); по кохановски?

Интересует даже не столько как это сделать в Кохане, а вообще, как в принципе получить результат работы MySQL функций, если он возвращает 0 строк? В phpmyadmin это как-то делается.

Автор:  Sergey [ 18 май 2013, 12:07 ]
Заголовок сообщения:  Re: Как выполнить SELECT UUID(); по кохановски?

Kohana UUID

Автор:  nkl [ 20 май 2013, 01:17 ]
Заголовок сообщения:  Re: Как выполнить SELECT UUID(); по кохановски?

Не подключается он что-то. Я закинул папку uuid в папку с модулями. Она у меня тут лежит /engine/plugin/uuid. Не волнуйтесь, в настройках index.php я изменил значение переменной $modules = 'engine/plugin'; Так что все по идеи должно работать, по крайне мере дефолтные модули работают. А этот выдает ошибку:
Цитата:
ErrorException [ Fatal Error ]: Class 'UUID' not found

Вот код, которым я проверяю функцию:
Код:
public function action_uuid()
   {
      $uuid = UUID::v4();
      $this->template->content = $uuid;
   }

P.S.
Еще одно уточнение, в bootstrap.php тоже все включено:
Код:
Kohana::modules(array(
    'auth'       => MODPATH.'auth',       // Basic authentication
   // 'cache'      => MODPATH.'cache',      // Caching with multiple backends
   // 'codebench'  => MODPATH.'codebench',  // Benchmarking tool
    'database'   => MODPATH.'database',   // Database access
   // 'image'      => MODPATH.'image',      // Image manipulation
   // 'minion'     => MODPATH.'minion',     // CLI Tasks
    'orm'        => MODPATH.'orm',        // Object Relationship Mapping
   // 'unittest'   => MODPATH.'unittest',   // Unit testing
    'userguide'  => MODPATH.'userguide',  // User guide and API documentation
    'uuid'      => MODPATH.'uuid', // UUID Generator plugin
   ));

Автор:  Sergey [ 20 май 2013, 01:32 ]
Заголовок сообщения:  Re: Как выполнить SELECT UUID(); по кохановски?

А качали именно https://github.com/shadowhand/uuid/tree/3.2/develop ?

Есть ещё вот https://github.com/Qballinternet/uuid/tree/3.3/develop правда пока не принятый. Но думаю это вопрос времени

Автор:  nkl [ 20 май 2013, 08:40 ]
Заголовок сообщения:  Re: Как выполнить SELECT UUID(); по кохановски?

Оказывается это так делается:
Код:
$query = DB::query(Database::SELECT, "call my()");
$query->execute();

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