Вызов функции СУБД через Query builder

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
psevdo
Сообщения: 96
Зарегистрирован: 2013.04.10, 11:10

Вызов функции СУБД через Query builder

Сообщение psevdo »

Здравствуйте. Есть БД под управлением PostgreSql. В БД программистом написаны функции. Как мне через построитель запросов вызывать эти функции? В функцию также нужно передать параметры.
psevdo
Сообщения: 96
Зарегистрирован: 2013.04.10, 11:10

Re: Вызов функции СУБД через Query builder

Сообщение psevdo »

Код: Выделить всё

$query->select('func_name(646031, 1)');
$command = $query->createCommand(Yii::$app->db);
$rows = $command->queryAll();
SQLSTATE[42601]: Syntax error: 7 ОШИБКА: ошибка синтаксиса в конце
LINE 1: SELECT func_name(646031, "1)"
^
The SQL being executed was: SELECT func_name(646031, "1)"
У второго параметра есть значение по-умолчанию (0 - integer). Если его не указывать, то нормально отрабатывает.
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Вызов функции СУБД через Query builder

Сообщение SiZE »

Попробуй через Expression или массив
psevdo
Сообщения: 96
Зарегистрирован: 2013.04.10, 11:10

Re: Вызов функции СУБД через Query builder

Сообщение psevdo »

Код: Выделить всё

$query->select(['func_name(646031, 1)']);
$command = $query->createCommand(Yii::$app->db);
$rows = $command->queryAll();
Вот так получилось.
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Вызов функции СУБД через Query builder

Сообщение SiZE »

psevdo писал(а): 2018.08.02, 11:12

Код: Выделить всё

$query->select(['func_name(646031, 1)']);
$command = $query->createCommand(Yii::$app->db);
$rows = $command->queryAll();
Вот так получилось.
Отлично. Домашнее задание: почему со строкой не прокатило? )
psevdo
Сообщения: 96
Зарегистрирован: 2013.04.10, 11:10

Re: Вызов функции СУБД через Query builder

Сообщение psevdo »

Наверняка знаешь. Сейчас нет времени думать над этим) Начальство требует. Выкладывай.
И спасибо за наводку)
Ответить