Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Orm 如何在Symfony中获取关系数据?_Orm_Relational Database_Symfony - Fatal编程技术网

Orm 如何在Symfony中获取关系数据?

Orm 如何在Symfony中获取关系数据?,orm,relational-database,symfony,Orm,Relational Database,Symfony,我创建了两个实体。 1.预订 2.餐馆 在生成预订查询时,用户还将从所有餐厅的下拉列表中选择一家餐厅。所以我在Bookings实体中设置了多个One关系 class Bookings { ... /** * @var int */ /** * @ManyToOne(targetEntity="Restaurants", inversedBy="restaurant_id") * @JoinColumn(name="restaurant_id", referencedCo

我创建了两个实体。 1.预订 2.餐馆

在生成预订查询时,用户还将从所有餐厅的下拉列表中选择一家餐厅。所以我在Bookings实体中设置了多个One关系

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();
}

...


}
因此,一个餐厅与每个预订查询关联,而多个预订查询将与每个预订关联

现在从控制器获取所有预订查询的列表。我只收到预订表的详细信息。但我怎样才能在每次预订查询中获得相关的餐厅详细信息,如id和餐厅名称

下面是获取所有预订查询的查询

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

但此查询只返回预订详细信息,而不返回餐厅详细信息,尽管我已在bookings实体中设置了关系。如何在结果集中自动获取餐厅详细信息以及每个预订查询。

我可以马上告诉您,您的许多功能都有问题:

 /**
  * @ManyToOne(targetEntity="Restaurants", inversedBy="restaurant_id")
  * @JoinColumn(name="restaurant_id", referencedColumnName="id",  onDelete="CASCADE")
  */
inversedby指的是包含OneToMany集合的财产,在您的情况下,它不是餐厅id,而是预订

正确地说:

 /**
  * @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
重新启动实体应类似于:

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

我建议您阅读,并确保您彻底了解了条令中的关系是如何工作的。

在做了一个小时的Rnd之后,我发现实体使用的不是PHP注释,而是XML版本。所以我在xml文件中添加了正确的关系设置,现在可以正常工作了。

Hi Richard,谢谢您的解决方案。我尝试了这个方法,但仍然没有在结果集中提供餐厅详细信息。您应该能够在预订实例上调用$booking->getRestaurant(),这将返回一个餐厅实例。如果需要餐厅列表,则需要将其作为实体类型添加到表单中: