0

この非常に具体的な質問で申し訳ありませんが、私はこの問題を数回経験しました.私は操作さえしていません。誰かが以前に同じ問題を抱えていたのだろうか。

symfony 1.4 と doctrine を使用すると、関連しないテーブルのクエリからこのエラーが発生します

Column not found: 1054 Unknown column 'o.training_id' in 'field list'

私のschema.ymlには、このようなものがあります。

OhrmTraining:
  connection: doctrine
  tableName: training
  columns:
    id_training:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    name:
      type: string(60)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
TrainingDetail:
  connection: doctrine
  tableName: training_detail
  columns:
    id_training_detail:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    training:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
   relations:
    OhrmTraining:
    local: training
    foreign: id_training
    type: one

他のテーブルと関連しています 詳細

このような

TrainingDetail:
  connection: doctrine
  tableName: training_detail
  columns:
    id_training_deetail:
    type: integer(4)
    fixed: false
    unsigned: false
    primary: true
    autoincrement: true
  training:
    type: integer(4)
    fixed: false
    unsigned: false
    primary: false
    notnull: true
    autoincrement: false
relations:
  Training:
  local: training
  foreign: id_training
  type: one

これは正しいと思いますが、私のdoctrine/base/BaseTraining.classでは、最後に(トレーニング用に)このようなものがあります

public function setUp()
{
    parent::setUp();
    $this->hasMany('TrainingDetail', array(
         'local' => 'id', <--- this should be the id_training_detail??
         'foreign' => 'training_id')); <--- this should be training?

なぜ彼らがそのようになっているのか、またはそうあるべきなのかはわかりません... 誰か助けてくれませんか?

私はそれらを

public function setUp()
{
    parent::setUp();
    $this->hasMany('TrainingDetail', array(
         'local' => 'id_training',
         'foreign' => 'training'));

それでも、エラーが発生し、モデルをリメイクするとすべてがなくなります

DB から schema.yml ファイルを作成する簡単な方法はありませんか?

編集:例外をスローするクエリはこれです

 $query = Doctrine_Query::create()
    ->from('Times a')
    ->where('a.employee_id = ?', $employeeId)
    ->orderBy('a.start_date ASC');
    $results = $query->execute();

従業員のベースを確認しましたが、トレーニングとは関係がなく、トレーニングの詳細とは関係ありません...しかし、トレーニングとは直接関係ありません。モデルを10回再作成しましたが、それでも同じです

4

1 に答える 1

2

「それでもエラーが出て、リメイクモデルを作ると全部なくなってしまう」

これは、基本クラスを介してセットアップを編集したためです。基本クラスは、モデルを構築するときに常にオーバーライドされます

「DB から schema.yml ファイルを作成する簡単な方法はありませんか?」

これは意味がありません。スキーマからスキーマ ファイルを生成できたことは明らかです。そうでなければ、スキーマ ファイルはありません。

リレーションの場所は、指定されたスキーマ ファイルに従って正しく表示されます。Doctrineのドキュメントによると:

「リレーションシップを指定する場合、外部キーが存在する側のリレーションシップを指定するだけで済みます。スキーマ ファイルが解析されると、リレーションシップが反映され、反対側のエンドが自動的に構築されます。リレーションシップのもう一方のエンドを手動で指定すると、自動生成は効果がありません。」

モデル ファイルをビルドすると、doctrine は基本クラスのメソッドを正しく構成するsetUpため、それを行う必要はありません。関係を変更したい場合は、スキーマ ファイルを使用して変更し、モデル ファイルを再構築します。

あなたが抱えている問題は、投稿したエラーのために、DQL またはモデル参照を介してクエリを作成する方法にあると思われます。

「列が見つかりません: 1054 'フィールド リスト' の不明な列 'o.training_id'」

- 編集 -

エラーとクエリに基づいて、選択する列を指定できます。これを試してください。

$query = Doctrine_Query::create()
    ->select('a.*')
    ->from('Times a')
    ->where('a.employee_id = ?', $employeeId)
    ->orderBy('a.start_date ASC');

$results = $query->execute();
于 2013-06-03T22:39:03.067 に答える