0

私は、訂正であると私が信じる2つの調整を除いて、ほぼ一言一句ドキュメントに従っています。

最初の調整:冗長性を排除しDIRECTORY_SEPARATORますsystem/application/doctrine.php

//this produces "...system/application//fixtures"
$config = array('data_fixtures_path'  =>  dirname(__FILE__) . DIRECTORY_SEPARATOR . '/fixtures',

//Replaced with:
$config = array('data_fixtures_path'  =>  dirname(__FILE__) . DIRECTORY_SEPARATOR . 'fixtures',

結果のパスは正しく表示されます。

2番目の調整:生成されたモデル(たとえばmodels/User.php)は、拡張するベースモデルをロードしていないようです。そのため、次のように各モデルにDoctrine_Record明示的な呼び出しを追加します。require()

require('generated/BaseUser.php');

class User extends BaseUser { ... }

だから、私の現在の問題:初めてテーブルを構築するときになると:

$ ./doctrine build-all-reload
build-all-reload - Are you sure you wish to drop your databases? (y/n)
y
build-all-reload - Successfully dropped database for connection named 'mydb'
build-all-reload - Successfully created database for connection named 'mydb'
build-all-reload - Created tables successfully
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'mydb.user' doesn't exist

Doctrineは、テーブルを空にしたり、テーブルを削除したり、データベースを削除したり、データベースを作成したりしているようですが、なぜテーブルが作成されないのか理解できません。はっきりと書かれていますCreated tables successfullyが、SHOW TABLES;「データベースにテーブルが見つかりません」と返されます。

Doctrineは私と同じMySQLユーザーを使用していますALL PRIVILEGES

Doctrineがテーブルを作成できない理由はありますか?うまくいけば、私はただ盲目であるか、そして/または愚かです。

または、yamlスキーマまたはこの問題をデバッグするために自分で実行できるモデルに基づいてSQL CREATEステートメントのファイルを作成する方法はありますか?

4

2 に答える 2

0

たぶん、あなたはすでにそれをしましたが、それについて言及していませんが、あなたは必要なすべての「ロード」コマンドを見逃しているかもしれません。ここでの使用requireは最善の解決策ではありません。

Doctrine_Core::loadModels(realpath(dirname(__FILE__) . '/..') . DIRECTORY_SEPARATOR . 'models');

これは、Doctrine関連のモデルファイル(モデル、ベースモデル、テーブルなど)を保持するディレクトリごとに実行する必要があります。これは、再帰的に機能しないためです。loadModels私はまったく同じ問題を抱えていて、ディレクトリごとに定義することでうまくいきました。

于 2010-10-16T05:44:55.753 に答える
0

この特定のケースでは、テーブル名「user」が理由になる可能性があります。テーブルに他の名前を設定してみてください。

于 2010-10-14T20:18:55.190 に答える