Настройка Symfony2 DBAL & ORM - PullRequest
5 голосов
/ 01 мая 2011

Так что я все утро возился с Symfony2 и читал основную документацию или, по крайней мере, половину. Я застрял во всем, что связано с базой данных.

Мой простой вопрос: мы делаем структуру базы данных заранее или нет?

Документация говорит, что создайте класс Entity, а затем сгенерируйте таблицу базы данных, используя базу данных: создайте в CLI. Я последовал и сделал класс сущности блога с примечаниями orm.

выполнил команду:

php app/console doctrine:database:create

Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) in /Applications/MAMP/htdocs/flairbagSy2/vendor/doctrine-dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php on line 36
Could not create database for connection named blog
SQLSTATE[HY000] [2002] No such file or directory

Я думаю, это как-то связано с расположением файла сокета mysql, но я не знаю, как изменить путь к файлу сокета в конфигурации Symfony2.

Если кто-то может просто указать, где я могу изменить путь к файлу сокета.

Однажды у меня была похожая проблема с CakePHP, и простым решением было добавить ключ порта в массив соединений db:

var $default = array(
    'driver' => 'mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'root',
    'password' => 'root',
    'database' => 'cake',
    'port' => '/Applications/MAMP/tmp/mysql/mysql.sock',
);

Как мне это сделать в Symfony2.

Ответы [ 3 ]

7 голосов
/ 02 мая 2011

Команда doctrine: database: create не будет заполнять структуру таблиц, а создаст базу данных в вашем менеджере баз данных, например MySQL.Чтобы заполнить структуру базы данных, используйте команду doctrine:schema:create для первоначального создания структуры и команду doctrine:schema:update --force, когда вы хотите обновить структуру после внесения некоторых изменений в аннотации.

Как вы упомянули, вам нужно настроить некоторые параметры в Symfony2 для правильной работы Doctrine.Эти параметры необходимо установить в файле конфигурации config.yml, который вы можете найти в папке app / config стандартного дистрибутива Symfony2.Вот пример конфигурации, которую нужно добавить в файл config.yml:

# Doctrine Services Configuration
doctrine:
  dbal:
    default_connection: default
    connections:
      default:
        driver:   pdo_mysql
        host:     localhost
        port:     3396
        dbname:   dbname_dev
        user:     dbname_dev
        password: yourpassword
        logging:  "%kernel.debug%"

  orm:
    auto_generate_proxy_classes: "%kernel.debug%"
    default_entity_manager: default
    entity_managers:
      default:
        mappings:
          AcmeBundle: ~

Первая часть конфигурации, часть dbal, используется для настройки информации о подключении к вашей базе данных.Я бы посоветовал вам сначала протестировать соединение с корневой учетной записью вашей базы данных, а затем, когда все работает хорошо, изменить настройки, чтобы использовать выделенного пользователя.Таким образом, вы уверены, что у вас нет проблем с привилегиями или других проблем, которые могут быть связаны с выделенным пользователем.

Вторая часть, часть orm, используется для настройки отображенияваши объекты в базу данных.Эта часть требуется, если вы хотите, чтобы Symfony2 автоматически заполнял структуру базы данных.Замените AcmeBundle на имя вашего пакета в приведенном выше примере, чтобы включить функциональные возможности orm в вашем проекте.

Кроме того, команда Symfony2 работает над упрощением конфигурации, и я думаю, что теперь есть более простой способнастроить параметры Доктрины.Я предлагаю вам пример, который я сейчас использую с Beta1 Symfony2.

И, наконец, чтобы ответить на ваш вопрос, я думаю, что лучше всего позволить Symfony2 заниматься созданием и обновлением структуры базы данных.Одним из аргументов в пользу этого было бы то, что вам не нужно поддерживать файл SQL, связанный со структурой базы данных.Эта информация косвенно хранится в аннотациях вашей сущности, поэтому вам просто нужно изменить аннотации и вызвать команду doctrine:schema:update --force, чтобы обновить структуру.Имея это в виду, вы не должны создавать структуру заранее, а позволить Symfony2 создать ее для вас.

Вот рабочий процесс для проверки того, что все работает:

  1. Обновите ваш config.yml (в app / config), включив в него параметры конфигурации Doctrine
  2. Откройте приглашениеи перейдите в корневую папку дистрибутива Symfony (где вы видите папки app, src, vendor и web)
  3. Выполните php app/console doctrine:database:create, чтобы создать базу данных в MySQL
  4. Выполните php app/console doctrine:schema:createдля создания структуры базы данных
  5. Проверьте в MySQL, что база данных и структура были созданы правильно

Надеюсь, что это поможет.

С уважением,
Matt

5 голосов
/ 24 февраля 2012

Изначально задавался вопрос о том, как определить нестандартный сокет в конфигурации Symfony2.

Для этого я добавляю новый параметр конфигурации в app / config / config.yml, который извлекает значение из файла параметров проекта (app / config / parameters.ini).

В app / config / parameters.ini добавьте значение database_socket:

;[parameters.ini]
database_socket   = "/var/mysql/mysql.sock"

и затем в app / config / config.yml введите значение параметра:

# Doctrine Configuration
doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        unix_socket: %database_socket%
        charset:  UTF8

Это передаст пользовательский путь сокета в соединение доктрины.

2 голосов
/ 29 декабря 2011

При использовании MAMP Вы можете создать символическую ссылку в папке / var / mysql / на файл /Applications/MAMP/tmp/mysql/mysql.sock

Сначала проверьте, существует ли ваша папка / var / mysql, если она не использует ее:

mkdir /var/mysql

Перейдите в указанную выше папку и напишите следующее, чтобы сделать символическую ссылку

sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock

у вас также могут быть проблемы с часовым поясом (не связанные с вышеуказанной проблемой, но если вы являетесь пользователем mamp, у вас, вероятно, также будет эта проблема), которую вы можете исправить, поместив следующее в ваш / private / etc / php INI-файл (примечание: это не ваш файл php.ini, найденный в папке MAMP)

date.timezone = "America/Montreal"

Примечание: вам может потребоваться изменить фактический часовой пояс, который может отличаться от моего.

Ссылка: http://www.iamseree.com/application-development/doctrine-error-on-mac-osx-it-is-not-safe-to-rely-on-the-systems-timezone-settings-you-are-required-to-use-the-date-timezone-setting-or-the-date_default_timezone_set-function

http://mikecroteau.wordpress.com/2011/08/07/symfony2-could-not-create-database-for-connection-named-sqlstatehy000-2002-no-such-file-or-directory/

...