0

公共交通機関の最適なルートと時刻表を探すアプリケーションを開発しています。Doctrine1 については多少の経験がありますが、Doctrine2 は初めてです。リレーション (mappedBy と inversedBy) を記述するいくつかの新しいフィールドと、いくつかの新しいマッピング方法があります。

私は次のコードを持っています:

$query = $this->em->createQuery("SELECT partial cls.{stop}, partial t.{arriveTime, departureTime} FROM \Entities\Timetable t 
JOIN t.ride r
JOIN t.carrierLineStop cls
WHERE t.departureTime>=:time AND 
r.idCarrierLine=:carrierLine AND 
(cls.idStop=:firstStop OR cls.idStop=:lastStop)");
$query->setParameters(array(
    'time' => $time,
    'carrierLine' => $path->getLine(),
    'firstStop' => $path->getFirstStop(),
    'lastStop' => $path->getLastStop()
));

そのスクリプトを実行しようとすると、エラーが発生しました。

[Semantical Error] line 0, col 24 near '}, partial t.{arriveTime,': Error: There is no mapped field named 'stop' on class Entities\CarrierLineStop.

マッピング ファイル:

Entities\CarrierLineStop:
type: entity
table: carrier_line_stop
fields:
    idCarrierLineStop:
        id: true
        type: integer
        unsigned: false
        nullable: false
        column: id_carrier_line_stop
        generator:
            strategy: IDENTITY
    nextStop:
        type: integer
        unsigned: false
        nullable: true
        column: next_stop
manyToOne:
    idCarrierLine:
        targetEntity: Entities\CarrierLine
        cascade: {  }
        mappedBy: null
        inversedBy: null
        joinColumns:
            id_carrier_line:
                referencedColumnName: id_carrier_line
        orphanRemoval: false
    stop:
        column: id_stop
        targetEntity: Entities\Stop
        cascade: {  }
        mappedBy: null
        inversedBy: carrierLineStop
        joinColumns:
            id_stop:
                referencedColumnName: id_stop
        orphanRemoval: false
lifecycleCallbacks: {  }

-

Entities\Stop:
type: entity
table: stop
fields:
    idStop:
        id: true
        type: integer
        unsigned: false
        nullable: false
        column: id_stop
        generator:
            strategy: IDENTITY
    name:
        type: string
        length: 45
        fixed: false
        nullable: true
    miejscowosc:
        type: string
        length: 45
        fixed: false
        nullable: true
    latitude:
        type: decimal
        nullable: true
    longitude:
        type: decimal
        nullable: true
oneToMany:
    carrierLineStop:
        targetEntity: Entities\CarrierLineStop
        cascade: {  }
        mappedBy: stop
        inversedBy: null
        joinColumns:
            id_stop:
                referencedColumnName: id_stop
        orphanRemoval: false
lifecycleCallbacks: {  }

問題がどこにあるのかわかりません...

4

1 に答える 1

0

キーワード partial はエンティティ フィールド (idCarrierLineStop や nextStop など) でのみ機能すると思います。stop は複合フィールドです。

このようにクエリを残したい場合は、ManyToOne マッピングを削除して id_stop でフィールド マッピングを追加するか、代わりにクエリで Stop エンティティを使用して JOIN を追加し、cls.{stop} の代わりにその id を返す必要があります。

于 2012-11-24T15:41:13.077 に答える