Orm 如何在Symfony中获取关系数据?
我创建了两个实体。 1.预订 2.餐馆 在生成预订查询时,用户还将从所有餐厅的下拉列表中选择一家餐厅。所以我在Bookings实体中设置了多个One关系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
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(),这将返回一个餐厅实例。如果需要餐厅列表,则需要将其作为实体类型添加到表单中: