Какóго?!

Apr 13, 2011 16:32

Видимо, я ничё не понимаю в ORM вообще и DBIx::Class в частности.
Элементарная для чистого SQL задача: вывести отсортированный по алфавиту список людей может решаться, например, таким запросом: SELECT CONCAT_WS(' ', lname, fname, sname) AS name
FROM user
ORDER BY name;
Попытки перевести этот запрос на DBIx::Class - сплошь и рядом безуспешные, не ( Read more... )

sql, программизм, orm, perl, mysql, dbix::class

Leave a comment

Comments 9

nordicdyno April 13 2011, 12:48:25 UTC
а в сторону Rose::DB не смотрели?

Reply

Не смотрел shoorick April 13 2011, 13:16:09 UTC
Не смотрел. Потому что на ужé работающем сайте менять ORM не стóит, наверное.

Reply


knutov April 13 2011, 13:22:09 UTC
btw, не во всех БД есть этот конкат, если я правильно помню - его нет у постгри. Поэтому, возможно, с этим проблемы.

Ну и вообще подобное обсуждалось у меня в комментах примерно год назад и пришли к выводу, что лучше это делать программно в цикле уже после получения ссылки на весь массив.

upd: хотя не, у постгри гроуп конкат помоему нет...

Reply


оффтоп, ну почти оффтоп... monja74 April 13 2011, 23:24:58 UTC
Иногда моя флента начинает меня пугать:


... )

Reply


dionys2 April 14 2011, 11:51:42 UTC

Как-то так:

'columns' => [
{
'name' => {
'concat_ws' => ["' '", 'lname', 'fname', 'sname'],
'-as' => 'name',
},
},
]

DBIx::Class умеет превращать ключи хешей в имена функций и ключевые слова.

Reply

dionys2 April 14 2011, 12:01:54 UTC

Вернее так, чтобы символ пробела не воспринимался как имя поля:

'columns' => [
{
'name' => {
'concat_ws' => [\[q(' ')], 'lname', 'fname', 'sname'],
'-as' => 'name',
},
},
]

Reply


еще вариант: ext_435429 April 14 2011, 12:16:53 UTC
search_rs(undef, {
select => [ \'CONCAT_WS(' ', lname, fname, sname) AS name' ],
as => ['name'],
order_by => ['name']
)

Reply


Leave a comment

Up