2011-05-01 6 views
5

나는 심포니 2를 아침 내내 읽었으며 주요 문서 또는 적어도 절반을 읽었습니다. 나는 Database와 관련이있다.Symfony2 DBAL & ORM 설치

간단한 질문 : 우리는 전에 데이터베이스 구조를 만들지 않습니까?

설명서에서는 make the Entity 클래스를 작성한 다음 CLI에서 database : create를 사용하여 데이터베이스 테이블을 생성합니다. 필자는 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 연결 배열에 포트 키를 추가했다 : 나는 Symfony2에서 그렇게 어떻게

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

합니다.

+3

데이터베이스 연결 설정에서'unix_socket' 매개 변수를 사용하십시오 – meze

답변

7

doctrine : database : create 명령은 테이블의 구조를 채우지 않고 MySQL과 같은 데이터베이스 관리자에 데이터베이스를 작성합니다. 데이터베이스 구조를 채우려면 주석의 일부를 수정 한 후 구조를 업데이트하려면 구조의 초기 생성에 doctrine:schema:create 명령을 사용하고 doctrine:schema:update --force 명령을 사용하십시오.

언급했듯이, Doctrine이 올바르게 작동하기 위해서는 Symfony2의 일부 매개 변수를 구성해야합니다. 이러한 매개 변수는 표준 Symfony2 배포의 app/config 폴더에서 찾을 수있는 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 부분의 첫 번째 부분, 사용되는 구성 데이터베이스 연결 정보 : 다음은 config.yml 파일에 추가하는 데 필요한 구성의 샘플입니다. 먼저 데이터베이스의 루트 계정으로 연결을 테스트 한 다음 모든 것이 잘 작동하면 전용 사용자를 사용하도록 설정을 변경하는 것이 좋습니다. 이렇게하면 전용 사용자와 관련 될 수있는 권한 문제 나 다른 종류의 문제가없는 것으로 확신 할 수 있습니다.

두 번째 부분 인 orm 부분은 엔티티와 데이터베이스의 매핑을 구성하는 데 사용됩니다. Symfony2가 데이터베이스 구조를 자동으로 채우게하려면이 부분이 필요합니다. AcmeBundle을 프로젝트 샘플에서 orm 기능을 사용하려면 위 샘플에서 번들 이름으로 바꿉니다.

사이드 노트에서 Symfony2 팀은 구성을 단순화하기 위해 노력하고 있습니다. 이제 Doctrine 매개 변수를 구성하는 더 쉬운 방법이 있다고 생각합니다. Symfony2의 Beta1에서 지금 사용하고있는 샘플을 제안합니다.

마지막으로 귀하의 질문에 답하기 위해 Symfony2가 작성을 처리하고 데이터베이스 구조를 업데이트하는 것이 가장 좋습니다. 이 주장을지지하는 한 가지 주장은 데이터베이스 구조를 다루는 SQL 파일을 유지할 필요가 없다는 것입니다. 이 정보는 엔티티의 주석에 의해 암시 적으로 보관되므로 주석을 변경하고 doctrine:schema:update --force 명령을 호출하여 구조를 업데이트하면됩니다.이를 염두에두고, 여러분은 먼저 구조체를 생성해서는 안되지만 Symfony2가 여러분을 대신하여 구조체를 생성하게하십시오.

  1. 업데이트 (응용 프로그램/설정에서) 당신의 config.yml 교리 구성 매개 변수
  2. 열고 프롬프트를 포함하고의 루트 폴더로 이동 : 여기

    가 작동되는 모든 테스트 할 수있는 워크 플로 (앱, SRC, 공급 업체 및 웹 폴더 참조) 심포니 배포
  3. 실행 php app/console doctrine:database:create는 데이터베이스 구조를 만들
  4. MySQL의
  5. 에서 실행 php app/console doctrine:schema:create을 데이터베이스를 만들 수,536,
  6. MySQL에서 데이터베이스와 구조가 올바르게 생성되었는지 확인하십시오.

희망이 도움말.

감사합니다,
매트

+0

어디서 스키마를 정의 할 예정입니까 ?? schema.yml의 Symfony1에서 사용하는 것처럼 말입니다.나는 완전히 혼란스럽게 도와주세요. –

+0

처음에는 Symfony1을 사용해 본 적이 없지만 Symfony2에는 하나의'schema.yml'이 없습니다. 모든 엔티티는 자체 스키마 파일을 가져야하며이 엔트리를 다음과 같은 파일에 저장해야합니다 :'@ AcmeBundle/Resources/config/doctrine/EntityClassName.orm.yml'. symfony2 공식 서적의'Databases and Doctrine'에있는 [documentation] (http://symfony.com/doc/current/book/doctrine.html#add-mapping-information)을 읽고 대신'YAML' 탭으로 전환하십시오. 기본값은 'Annotations'입니다. – Matt

+0

@Matt에게 감사드립니다. 내가 Symfony1에서 왔을 때, 나는 혼란스러워했다. –

2

MAMP를 사용하여 파일을

먼저 확인 /Applications/MAMP/tmp/mysql/mysql.sock하는 당신은/var/mysql을/폴더에 심볼릭 링크를 생성 할 수있는 경우 그것은 사용하기 나던 경우는/var/mysql을 폴더가 존재하는지 확인하기 : 다음 당신의 심볼릭 링크 만들기 위해 다음과 같은 쓰기

mkdir /var/mysql 

이동을 위의 폴더에

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

시간대 문제 (위의 문제와 관련이 없지만 mamp 사용자의 경우이 설정을 사용할 수도 있음)는/private/etc/php.ini의 파일 (주의 : 이것은 당신의 MAMP 폴더에 php.ini 파일 없음)

date.timezone = "America/Montreal" 

참고 : 당신은 광산과 다를 수 있습니다 실제 시간대를 변경해야 할 수도 있습니다.

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

+0

MAMP 2.0.5 + Symfony 2.0.16에서이 ln 명령은 책 장 "데이터베이스 및 교리"에서 코드를 가져 오는 유일한 대답입니다! 감사. –

+0

Lion 및 Sf 2.1에서 사용할 수있는 항목이 없습니다. 저는 2012 년에 우리가 아직 작업하고있는 도구가 너무 끔찍하다는 사실에 대해 이야기합니다. 나는 1998 년부터 개발사로 일해 왔고, 상황은 더욱 악화되고있는 것처럼 보입니다. – Acyra

5

원래의 질문 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

가 Symfony2 구성에서 표준이 아닌 소켓을 정의하는 방법에 대해 물었다.

내가하는 일은 프로젝트 매개 변수 파일 (app/config/parameters.ini)에서 값을 가져 오는 app/config/config.yml에 새 구성 설정을 추가하는 것입니다. 앱

/구성/parameters.ini하는 database_socket 값 추가

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

하고 앱/구성/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 

을 그 사용자 정의 소켓 경로를 교리의 연결로 전달합니다.

+1

이것은 정확히 내가 필요한 것입니다. 내 mysql.sock은/tmp 디렉토리에있다. – zcopley