Entry tags:
- dbix::class,
- mysql,
- orm,
- perl,
- sql,
- программизм
Какóго?!
Видимо, я ничё не понимаю в ORM вообще и DBIx::Class в частности.
Элементарная для чистого SQL задача: вывести отсортированный по алфавиту список людей может решаться, например, таким запросом:
upd/16:50: Из всех методов один даёт почти такой запрос, какой надо. Но как странно это выглядит!
Элементарная для чистого SQL задача: вывести отсортированный по алфавиту список людей может решаться, например, таким запросом:
SELECT CONCAT_WS(' ', lname, fname, sname) AS name
FROM user
ORDER BY name;
Попытки перевести этот запрос на DBIx::Class — сплошь и рядом безуспешные, не помогает ни бубен, ни чтение мануала. Точнее, чтение мануала помогло лишь в одном, понять, что атрибут as
ничего не делает. Гугление тоже не особо помогает... По каким принципам в DBIx::Class используются всякие \
, []
и {}
— тоже не ясно, складывается ощущение, что как попало.upd/16:50: Из всех методов один даёт почти такой запрос, какой надо. Но как странно это выглядит!
$c->model('Dbase::User')->search(
{},
{
'select' => [ { '' => \q{CONCAT_WS(' ', lname, fname, sname)}, -as => 'name' } ],
'order_by' => [ 'name' ],
}
)
upd/вечернее: Атрибут as
всё-таки нужен. Но не для влияния на SQL (он на него не влияет), а для явного указания дбикс-классу имени нового поля.'select' => [ 'id', { '' => \q{CONCAT_WS(' ', lname, fname, sname)}, -as => 'name' } ],
'as' => [qw( id name )],
Если его не указать, то появляются сообщение об ошибке: «Метод name
не существует».
no subject
Не смотрел
no subject
Ну и вообще подобное обсуждалось у меня в комментах примерно год назад и пришли к выводу, что лучше это делать программно в цикле уже после получения ссылки на весь массив.
upd: хотя не, у постгри гроуп конкат помоему нет...
оффтоп, ну почти оффтоп...
no subject
Как-то так:
DBIx::Class
умеет превращать ключи хешей в имена функций и ключевые слова.no subject
Вернее так, чтобы символ пробела не воспринимался как имя поля:
еще вариант:
select => [ \'CONCAT_WS(' ', lname, fname, sname) AS name' ],
as => ['name'],
order_by => ['name']
)
no subject
(Anonymous) 2011-04-17 07:12 am (UTC)(link)В чём смысл
В простых случаях такой код выглядит достаточно симпатично. Но вот в сложных — начинается ужас и кошмар.