5

それで、私は午前中ずっと Symfony2 をいじっていて、主要なドキュメント、または少なくともその半分を読みました。私はデータベースに関連するもので立ち往生しています。

私の簡単な質問は、データベース構造を事前に作成するかどうかです。

ドキュメントには、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接続配列にポートキーを追加することでした:

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

Symfony2 でそれを行うにはどうすればよいですか。

4

3 に答える 3

8

doctrine:database:create コマンドは、テーブルの構造を作成するのではなく、MySQL などのデータベース マネージャーにデータベースを作成します。データベース構造にデータを入力するにはdoctrine:schema:create、最初に構造を作成するときに コマンドを使用doctrine:schema:update --forceし、アノテーションに変更を加えた後に構造を更新するときに コマンドを使用します。

あなたが言及したように、Doctrine が正しく機能するためには Symfony2 でいくつかのパラメーターを設定する必要があります。これらのパラメーターは、標準の Symfony2 ディストリビューションの app/config フォルダーにある config.yml 構成ファイルで設定する必要があります。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 部分は、データベース接続情報の構成に使用されます。最初にデータベースのルート アカウントで接続をテストし、すべてが正常に機能するようになったら、専用ユーザーを使用するように設定を変更することをお勧めします。このようにして、専用ユーザーに関連する可能性のある特権の問題やその他の問題がないことを確認できます。

2 番目の部分である orm 部分は、データベースへのエンティティのマッピングを構成するために使用されます。この部分は、Symfony2 にデータベース構造を自動的に入力させたい場合に必要です。上記のサンプルの AcmeBundle をバンドルの名前に置き換えて、プロジェクトで orm 機能を有効にします。

余談ですが、Symfony2 チームは構成の簡素化に取り組んでおり、Doctrine パラメーターを構成するためのより簡単な方法があると思います。私が提案するサンプルは、私が現在 Symfony2 の Beta1 で使用しているものです。

そして最後にあなたの質問に答えるために、Symfony2 にデータベース構造の作成と更新を処理させるのが最善だと思います。これを支持する議論の 1 つは、データベース構造を扱う SQL ファイルを維持する必要がないということです。この情報は、エンティティの注釈によって暗黙的に保持されるため、注釈を変更し、doctrine:schema:update --forceコマンドを呼び出して構造を更新するだけです。これを念頭に置いて、事前に構造を作成するのではなく、Symfony2 に作成させてください。

すべてが機能していることをテストするワークフローは次のとおりです。

  1. config.yml (app/config 内) を更新して、Doctrine 構成パラメーターを含めます。
  2. プロンプトを開き、Symfony ディストリビューションのルート フォルダー (アプリ、src、ベンダー、および Web フォルダーが表示される場所) に移動します。
  3. 実行php app/console doctrine:database:createして MySQL にデータベースを作成する
  4. 実行php app/console doctrine:schema:createしてデータベース構造を作成します
  5. データベースと構造が正しく作成されていることを MySQL で確認します

この助けを願っています。

よろしく、
マット

于 2011-05-02T06:58:54.780 に答える
5

元の質問は、Symfony2 構成で非標準ソケットを定義する方法について尋ねました。

私が行う方法は、プロジェクト パラメーター ファイル (app/config/parameters.ini) から値を取得する app/config/config.yml に新しい構成設定を追加することです。

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

これにより、カスタム ソケット パスが doctrine の接続に渡されます。

于 2012-02-23T22:25:57.703 に答える
2

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ファイルに次のように挿入することで修正できます(注:これは、MAMPフォルダーにあるphp.iniファイルではありません)

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/

于 2011-12-29T19:10:13.163 に答える