Запрос на выборку с дополнительным полем

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

Запрос на выборку с дополнительным полем

Сообщение ULTIMITE »

В общем, есть у меня такой запрос:

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

$q->with('performers')
                ->with('objects')
                ->with(['children' => function(ActiveQuery $query) {
                    $query->orderBy('TASKID');
                }])
                ->with([ 'durations' => function(ActiveQuery $query) { $query->orderBy('PINNEDDATE'); } ]);
            $tasks = $q->orderBy('')->asArray()->all();
Он работает, делает все, что нужно, все нормально. Он выбирает все нужные мне поля, но помимо этого я хочу к ним добавить еще одно вспомогательное, которое бы всегда равнялось нулю. Когда я пытаюсь заменить последнюю строку на одно из этого:

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

$tasks = $q->select(['0 as newfield'])->orderBy('')->asArray()->all();
$tasks = $q->select(['newfield' => 0])->orderBy('')->asArray()->all();
То получаю ошибку:

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

Error Code    : 904
Error Message : ORA-00904: "0": недопустимый идентификатор
Position      : 7
Statement     : SELECT "0" AS "newfield" FROM "V_TASKS"
Bindings      : []

The SQL being executed was: SELECT "0" AS "newfield" FROM "V_TASKS"
Вообще я хочу выбрать все поля по запросу, и добавить новое, но до этого не дошел, т.к. он даже просто новое поле не создает. Не понимаю, что я делаю не так. Ведь

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

select 0 as newfield
from V_TASKS
выполняется как надо SQLDeveloper'е.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Запрос на выборку с дополнительным полем

Сообщение ElisDN »

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

['newfield' => new Expression(‘0’)]
ULTIMITE
Сообщения: 10
Зарегистрирован: 2017.02.22, 09:09

Re: Запрос на выборку с дополнительным полем

Сообщение ULTIMITE »

ElisDN писал(а): 2018.02.14, 14:01

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

['newfield' => new Expression(‘0’)]
Теперь сообщение ошибки такое:

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

Undefined index: TASKID
Строка выглядит так:

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

$tasks = $q->select(['newfield' => new Expression('0')])->orderBy('')->asArray()->all();
Еще пробовал:

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

$tasks = $q->select(['*', 'newfield' => new Expression('0')])->orderBy('')->asArray()->all();
$tasks = $q->addSelect(['*', 'newfield' => new Expression('0')])->orderBy('')->asArray()->all();
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Запрос на выборку с дополнительным полем

Сообщение ElisDN »

Расставьте псевдонимы для таблиц.
ULTIMITE
Сообщения: 10
Зарегистрирован: 2017.02.22, 09:09

Re: Запрос на выборку с дополнительным полем

Сообщение ULTIMITE »

ElisDN писал(а): 2018.02.14, 14:18 Расставьте псевдонимы для таблиц.
Так, вы имеете ввиду? (пробовал не ставить для with'ов):

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

$q = VTask::find()->alias('main');
$q->with('performers a')
                ->with('objects b')
                ->with(['children c' => function(ActiveQuery $query) {
                    $query->orderBy('TASKID');
                }])
                ->with([ 'durations' => function(ActiveQuery $query) { $query->orderBy('PINNEDDATE'); } ]);
$tasks = $q->select(['*', 'main.newfield' => new Expression('0')])->orderBy('')->asArray()->all();
Вот результат ошибки:

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

Error Code    : 923
Error Message : ORA-00923: ключевое слово FROM не найдено там, где оно ожидалось
Position      : 8
Statement     : SELECT *, 0 AS "main"."newfield" FROM "V_TASKS" "main"
Bindings      : []

The SQL being executed was: SELECT *, 0 AS "main"."newfield" FROM "V_TASKS" "main"
Не знаю, важно ли, но если перед * поставить main, ничего не меняется, та же ошибка
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Запрос на выборку с дополнительным полем

Сообщение ElisDN »

Для псевдонима newfield псевдоним не нужен.
ULTIMITE
Сообщения: 10
Зарегистрирован: 2017.02.22, 09:09

Re: Запрос на выборку с дополнительным полем

Сообщение ULTIMITE »

ElisDN писал(а): 2018.02.14, 15:09 Для псевдонима newfield псевдоним не нужен.
Разобрался, спасибо. Для таблиц подключаемых через with псевдонимы тоже не нужны.
Ответить