Видимо, я ничё не понимаю в 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
не существует».