Symfony2 DBAL & ORM Setup

stemmer
5

Så jeg har vært å fikle rundt med Symfony2 hele morgenen og lese den viktigste dokumentasjonen eller minst halvparten av det. Jeg sitter på noe relatert til database.

Mitt enkle spørsmål er: gjør vi databasestrukturen før hånden eller ikke?

Dokumentasjon sier gjøre Entity klasse og deretter generere databasen tabellen ved hjelp database: oppretter på CLI. Jeg fulgte etter og laget en blogg enhet klasse med Orm merknader.

kjørte kommandoen:

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

Jeg tror dette har noe å gjøre med plasseringen av mysql kontakten filen, men jeg vet ikke hvordan å endre banen til stikkontakten filen i Symfony2 konfigurasjon.

Hvis noen kunne bare peke ut hvor endrer jeg banen til kontakten fil.

Jeg hadde en gang et lignende problem med CakePHP og enkel løsning var å legge til en port nøkkel til db forbindelse matrise:

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

Hvordan kan jeg gjøre det i Symfony2.

Publisert på 01/05/2011 klokken 13:08
kilden bruker
På andre språk...                            


3 svar

stemmer
7

Læren: database: skape kommandoen vil ikke fylle strukturen i tabellene, men heller opprette databasen på databasesystemet som MySQL. Hvis du vil fylle databasen strukturen, bruker du doctrine:schema:createkommandoen for den første etableringen av strukturen og doctrine:schema:update --forcekommandoen når du ønsker å oppdatere strukturen etter at du har gjort noen endringer i merknadene.

Som du har mentionned, må du konfigurere noen parametere i Symfony2 til Lære å fungere korrekt. Disse parametrene må settes i config.yml konfigurasjonsfil som du finner i app / config mappe med standard Symfony2 distribusjon. Her er et utvalg av konfigurasjonen du trenger å legge til config.yml filen:

# 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: ~

Den første delen av konfigurasjon, dbal del, brukes konfigurere databasetilkoblingsinformasjonen. Jeg foreslår at du først teste tilkoblingen med roten grunn av databasen og deretter når alt fungerer bra, endre innstillingene for å bruke en dedikert bruker. På denne måten er du sikker på at du ikke har noen privilegier problemer eller annen form for problemer som kan være relatert til den dedikerte brukeren.

Den andre delen, orm del, er å bruke til å konfigurere kartlegging av dine enheter til databasen. Denne delen er nødvendig hvis du vil Symfony2 å fylle databasen strukturen automatisk. Bytt AcmeBundle med navnet på din pakke i eksempelet ovenfor for å aktivere Orm funksjoner i prosjektet.

På en side note, er Symfony2 teamet jobber med å forenkle konfigurasjonen, og jeg tror det er nå en enklere måte å konfigurere Lære parametere. Prøven jeg foreslår at du er den jeg bruker akkurat nå med Beta1 av Symfony2.

Og til slutt å svare på spørsmålet ditt, jeg tror det beste er å la Symfony2 avtaler med etablering og oppdatere databasen strukturen. Et argument i favør av dette vil være at du ikke trenger å opprettholde en SQL-fil arbeider med databasestrukturen. Denne informasjonen blir implicitely holdt av kommentarer i din enhet slik at du bare trenger å forandre deg kommentarer og ringe doctrine:schema:update --forcekommandoen til å oppdatere strukturen. Med dette i tankene, bør du ikke lage strukturen før hånd, men la Symfony2 lage det for deg.

Her er arbeidsflyten for å teste at alt fungerer:

  1. Oppdater config.yml (i app / config) for å inkludere Lære konfigurasjonsparametere
  2. Åpne en ledetekst og gå til rotmappen på Symfony distribusjon (der du ser app, src, leverandør og web-mapper)
  3. Kjør php app/console doctrine:database:createfor å opprette databasen i MySQL
  4. Kjør php app/console doctrine:schema:createfor å opprette databasestrukturen
  5. Sjekk inn MySQL som database og strukturen har blitt opprettet på riktig måte

Håper dette hjelper.

Hilsen,
Matt

Svarte 02/05/2011 kl. 06:58
kilden bruker

stemmer
5

Den opprinnelige spørsmålet om hvordan man skal definere et ikke-standard stikkontakt i Symfony2 konfigurasjon.

Måten jeg gjør det er å legge til en ny config innstilling i app / config / config.yml som trekker i verdi fra prosjektets parametere fil (app / config / parameters.ini).

I app / config / parameters.ini, legge til en database_socket verdi:

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

og deretter i app / konfig / config.yml, trekke i parameterverdien:

# 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

Som vil passere den tilpassede kontakten stien inn doktrine forbindelse.

Svarte 23/02/2012 kl. 22:25
kilden bruker

stemmer
2

Hvis du bruker MAMP Du kan lage en symbolsk lenke i / var / mysql / mappen til /Applications/MAMP/tmp/mysql/mysql.sock fil

Først sjekk for å se om / var / mysql mappe finnes hvis den ikke gjør det ved hjelp av:

mkdir /var/mysql

Gå til ovennevnte mappe og deretter skrive følgende for å gjøre symbolsk lenke

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

Du kan også ha tidssone problemer (ikke relatert til ovennevnte problem, men hvis du er en MAMP bruker vil du sannsynligvis har dette også) som du kan fikse ved å sette følgende i /private/etc/php.ini fil ( merk: dette er ikke din php.ini fil funnet i MAMP mappen)

date.timezone = "America/Montreal"

Merk: Du må kanskje endre den faktiske tidssonen som kanskje ikke er den samme som min.

Referanser: http://www.iamseree.com/application-development/doctrine-error-on-mac-osx-it-is-not-safe-to-rely-on-the-systems-timezone-settings-you- er-nødvendig å bruke-the-date-tidssone-innstilling-eller-the-date_default_timezone_set-funksjon

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

Svarte 29/12/2011 kl. 19:10
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more