как использовать столбец alised в предложении where в laravel - PullRequest
0 голосов
/ 22 сентября 2019

Я хочу получить все max_id и min_id текущей даты из таблицы позиций, сместив часовой пояс на +05: 54.Я пытался.

$maxminpositionids = DB::table('tc_positions')
        ->select(DB::raw('max(id) maxid, min(id) minid, deviceid, date(CONVERT_TZ(servertime,\'+00:00\',\'+05:45\' )) as serv'))
        ->where('serv', '=', Carbon::now()->toDateString())
        ->get();

и у меня есть эта ошибка error

Есть ли способ решить и оптимизировать этот запрос?

1 Ответ

1 голос
/ 22 сентября 2019

В MySQL вы можете создавать псевдонимы столбцов в предложении select, однако вы не можете использовать их в предложении where того же запроса, потому что это неверный синтаксис.Я могу только догадываться о причине, которая, вероятно, является проблемой зависимости, потому что при поиске записей механизм проверяет, будут ли они в наборе результатов, и только после этого запускает логику в предложении select.Это всего лишь предположение, но оно имеет смысл, поскольку запрос будет намного медленнее, если сначала будет выполняться часть выбора, также у нас могут возникнуть проблемы, такие как необходимость в исходных полях и, возможно, создание псевдонима, идентичного существующему столбцу.имя.Независимо от того, прав ли я в отношении причины, вы не можете использовать псевдонимы столбцов в предложении where.Вместо этого просто позвоните whereRaw и передайте ему то же значение:

$serv = 'date(CONVERT_TZ(servertime,\'+00:00\',\'+05:45\' ))';
$maxminpositionids = DB::table('tc_positions')
        ->select(DB::raw('max(id) maxid, min(id) minid, deviceid, '.$serv.' as serv'))
        ->whereRaw($serv.'= ?', Carbon::now()->toDateString())
        ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...