Как установить переменную MysQL (time_zone) из doctrine / symfony? - PullRequest
5 голосов
/ 21 сентября 2010

Я хотел бы знать, как я могу установить часовой пояс MySQL на UTC (SET time_zone = 'UTC') из Symfony / Doctrine, поэтому, когда я вызываю функцию UNIX_TIMESTAMP() для поля DATETIME в моем запросе, он возвращаетUIX время Unix, а не Unix время в часовом поясе сервера.

Как я могу это сделать, либо автоматически при каждом подключении, либо вручную перед запросами такого типа, когда часовой пояс имеет значение?

Кстати, мне нужно выполнить это преобразование в запросе MySQLа не приложение, поэтому я могу GROUP BY интервал, который требует времени эпохи.

Ответы [ 4 ]

4 голосов
/ 21 сентября 2010

Это можно сделать с помощью обратных вызовов configureDoctrineConnection, вызываемых в ProjectConfiguration`:

public function configureDoctrineConnection(Doctrine_Connection $connection)
{
  $connection->exec('SET time_zone = "UTC"');
}

При использовании нескольких соединений могут возникнуть проблемы с этим.

(Отредактированный ответ для удаления ошибочного метода.)

1 голос
/ 21 сентября 2010

Я бы попробовал отредактировать конфигурацию проекта и добавить что-то вроде (непроверенное и непроверенное):

    $databaseManager = new sfDatabaseManager($this->configuration);
    $connection = $databaseManager->getDatabase($options['connection'])->getConnection();
    $diff = $connection->execute("SET time_zone = 'UTC'");

Примечание. $options и $this->configuration доступны только в задаче, поэтому, возможно, это следует жестко закодировать (я полагаю, по умолчанию это 'doctrine').

0 голосов
/ 28 ноября 2018

Извините за ответ не на MySQL, а на Oracle DB . Я долго искал данные на БД Oracle, но ничего не нашел. Это единственная тема, в которой также обсуждается проблема, но только в MySQL.

Возможно, кто-то поможет, для БД Oracle:

В файле config/services.yaml

Для Symofony 4:

services:
    Doctrine\DBAL\Event\Listeners\OracleSessionInit:
        arguments:
            - TIME_ZONE: 'UTC'
        tags:
            - { name: doctrine.event_listener, event: postConnect }

Для Symfony 2 и 3:

services:
    oci8.listener:
        class: Doctrine\DBAL\Event\Listeners\OracleSessionInit
        arguments:
            - TIME_ZONE: 'UTC'
        tags:
            - { name: doctrine.event_listener, event: postConnect }

Или вы можете записать объект аргументов в yaml как:

arguments: { TIME_ZONE: 'UTC' }
0 голосов
/ 22 сентября 2010

Если вы хотите сделать это на уровне приложения Symfony, способ добавить это к config/settings.yml

all:
  .settings:
    default_culture: en_US
    default_timezone: Asia/Kolkata
...