Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите врубиться в DBIx::Class, Пажалууууйста =) 
:(
    Опции темы
shootnix
  Дата 1.6.2009, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 3.9.2005
Где: Казахстан

Репутация: нет
Всего: 2



Всем привет. У меня не столько вопрос, сколько просьба к тем, кто хорошо знаком с DBIx::Class — помогите понять суть =) Третий день испещряю взором всяческие мануалы и перлдоки, но, то ли у меня какой-то затык, то ли в текстах этих ничего по сществу не отыскивается.

Значит, короче smile Хочется узнать самую суть: как SQL-запросы представляются в виде объектной модели этого класса? И, самое главное, как работать со сложными запросами, где, скажем, производится выборка из 2-х или 3-х таблиц одновременно.

В качестве примера могу привести вот такую базу:

Код

CREATE TABLE IF NOT EXISTS `products` (
  `id_product` int(11) NOT NULL auto_increment,
  `name_product` varchar(128) NOT NULL,
  `type_product` int(4) NOT NULL,
  PRIMARY KEY  (`id_product`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

CREATE TABLE IF NOT EXISTS `types` (
  `id_type` int(11) NOT NULL auto_increment,
  `type_number` int(4) NOT NULL,
  `type_void` varchar(50) NOT NULL,
  PRIMARY KEY  (`id_type`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;


Было бы просто чудно узнать, как, скажем, с помощью DBIx::Class выбрать из этих двух таблиц данные о продукте и хранимом типе этого продукта. 

Грубо говоря, запрос
Код

    SELECT products*, types.type_void FROM products, types WHERE products.type_product = types.type_number;


Представить средствами DBIx::Class. Очень буду благодарен.
PM WWW ICQ   Вверх
KSURi
Дата 1.6.2009, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 2
Всего: 27



По самой сути: довольно общий вопрос. Если не уточнять, то проще найти в инете какую-нибудь объемную статью типа "введение в ORM технологии".

По сложным запросам: такие выборки делаются с помощью join. Если еще не читали соответствующую страницу документации, то вот она: http://search.cpan.org/~ribasushi/DBIx-Cla...ual/Joining.pod.
Пример у вас не очень удачный имхо. Вы пытаетесь загрузить непосредственно данные, тогда как должны, по идее, загружать объекты. А данные получать уже из них, соответствующими методами. Т.е. примерно вот так это должно выглядеть:
Код

my @products = $dbix->resultset('Products')->search({}, {join => 'Types'}); # подразумевается что у вас уже есть настроенная scheme
my @types = map $_->type, @products; # метод type() возвращает тип



--------------------
Died at Life.pl line 21
PM Jabber   Вверх
shootnix
Дата 1.6.2009, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 3.9.2005
Где: Казахстан

Репутация: нет
Всего: 2



> Вы пытаетесь загрузить непосредственно данные, тогда как должны, по идее, загружать объекты.

Скорее, ни то, ни другое smile Я даю обычный пример, так сказать, учебную задачу. Как сделать это на чистом SQL, мне понятно. Не понятно, как это сделать, используя DBIx::Class, точнее, не понятна сама суть ментальных перестановок в моей голове, на уровне общих понятий. =) Боюсь, надо пояснить: к примеру, если вы всю жизнь ходили пешком по земле, то вам, по крайней мере, в начале, довольно сложно будет научиться плавать — вам придется изменить часть своих базовых понятий: чтобы двигаться вперед, нужно грести руками и отталкиваться ногами, например. Но не ходить. 

Вот что-то вроде этого. Ваш пример натолкнул на мысль, спасибо. Как я понимаю, выборка здесь происходит путем объединения двух запросов? А если мне нужно указать конкретные поля таблицы?
PM WWW ICQ   Вверх
KSURi
Дата 2.6.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 2
Всего: 27



Запрос один,объединение логическое. Это на всякий случай уточняю.
Можно и конкретные поля указать. Просто усложните соответствующим образом аргумент join. Для конкретностей обратитесь по ссылке выше.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
shootnix
Дата 2.6.2009, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 3.9.2005
Где: Казахстан

Репутация: нет
Всего: 2



Спасибо, немного стало понятнее. 
Как насчет has_many, belongs_to и many_to_many? Как они работают? Я имею ввиду, какие аргументы там передаются? Документацию читал, не понял ;-)
PM WWW ICQ   Вверх
gcc
Дата 14.6.2009, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



Код

SELECT rownum FROM (SELECT @rownum:=@rownum+1 rownum, id_co FROM (SELECT @rownum:=0) r,
(SELECT count(*) cnt, id_co FROM tablename GROUP BY id_co ORDER BY cnt DESC) t1) t2 WHERE t2.id_co=id_того,что нужно


может есть возможность такой запрос можно написать?
(мне он нужен)

PM WWW ICQ Skype GTalk Jabber   Вверх
KSURi
Дата 15.6.2009, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 2
Всего: 27



gcchttp://search.cpan.org/~ribasushi/DBIx-Cla...om_ResultSource

shootnix, врядли я вам объясню лучше, чем написано в оригинале. Тем более, что я не пользовался этим модулем)


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0646 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.