2016-04-09 8 views
-5

私は2つのエンティティを作成しました。 1.予約 2.レストランSymfonyでリレーショナルデータを取得するには?

予約照会を生成中、ユーザーはすべてのレストランのドロップダウンリストから1つのレストランを選択します。だから私はBookings EntityでMany2one関係を設定しました。

class Bookings 
{ 

... 

/** 
    * @var int 
    */ 
/** 
    * @ManyToOne(targetEntity="Restaurants", inversedBy="restaurant_id") 
    * @JoinColumn(name="restaurant_id", referencedColumnName="id", onDelete="CASCADE") 
    */ 
    private $restaurantId; 

... 

public function __construct() { 
    $this->restaurantId = new ArrayCollection(); 
} 

... 


} 

したがって、1つのレストランは各予約照会に関連付けられ、複数の予約照会はすべての予約と関連付けられます。

コントローラからすべての予約照会のリストを取得中です。私は予約テーブルの詳細のみを取得しています。すべての予約照会と一緒にidとres_nameのような関連するレストランの詳細を取得するにはどうしたらいいですか?

以下は、すべての予約照会を取得するためのクエリです。

$bookings = $this->getDoctrine() 
        ->getRepository('AppBundle:Bookings') 
        ->findAll(); 

しかし、私は予約エンティティに関係を設定していますが、このクエリはレストランの詳細ではなく予約の詳細のみを返しています。どのようにして結果セットで自動的に各予約照会と一緒にレストランの詳細を得ることができます。

答えて

1

私はすぐにあなたのManyToOneが間違って見えることを伝えることができます:

/** 
    * @ManyToOne(targetEntity="Restaurants", inversedBy="restaurant_id") 
    * @JoinColumn(name="restaurant_id", referencedColumnName="id", onDelete="CASCADE") 
    */ 

inversedbyは、あなたのケースでrestaurant_idされないOneToManyコレクションを、含まれているプロパティを指し、それは予約となります。

だから、正しく:私はあなたがassociation mapping documentationを読んで、あなたは完全に理解教義の仕事にどのような関係があることを確認してくださいお勧めします

/** 
* Booking entity collection 
* 
* @OneToMany(targetEntity="Booking", mappedBy="restaurant") 
*/ 
protected $bookings; 

/** 
    * @ManyToOne(targetEntity="Restaurants", inversedBy="bookings") 
    * @JoinColumn(name="restaurant_id", referencedColumnName="id", onDelete="CASCADE") 
    */ 

protected $restaurant; // id not needed here, you're referencing a whole entity in doctrine not a single id 

そしてRestarauntエンティティは次のようになります。

+0

こんにちはRichard、ソリューションをありがとう。私はこれを試しましたが、依然として結果セットにレストランの詳細を与えていません。 –

+0

予約のインスタンスに対して$ booking-> getRestaurant()を呼び出すことができ、Restaurantインスタンスを返す必要があります。レストランのリストが必要な場合は、エンティティタイプとしてフォームに追加する必要があります。http://symfony.com/doc/current/reference/forms/types/entity.html – Richard

0

Rndを数時間実行した後、エンティティがPHPアノテーションを使用していないことがわかりましたが、XMLバージョンが使用されていました。そこで、xmlファイルの適切な関係の設定を追加して、現在作業しています。

関連する問題