具有来自另一个实体的值的 Symfony 实体类型
Symfony Entity Type with values from another Entity
我还是 Symfony 的新手,我正在尝试一些(我认为)常见的东西。
我有一些实体:产品、主题、事件,具有一对多和多对一的连接;所以我还有其他名为 products_in_theme、products_in_event 的实体。
主题是一种派对,使用某种产品(如颜色、纸张等)。
当我举办活动时,我需要所有或部分产品,我需要将这些产品保存在 products_in_event 中。
使用 CraueFormFlowBundle 我创建了表单(第 1 步:select 主题和日期,第 2 步:select 产品)。
问题是:我需要在 EntityType "Product in Event" 中显示(为了坚持),来自 "Product In Theme" 的值。
查询不起作用,因为从 "product in event" 而不是仅 "product in theme"
public function buildForm(FormBuilderInterface $builder, array $options)
{
$theme= $options['theme'];
$builder
->add('products', EntityType::class, array(
'class' => 'AppBundle\Entity\ProductInEvent',
'expanded'=>'true',
'multiple' => 'true',
'query_builder' => function (EntityRepository $er) use ($theme){
return $er->createQueryBuilder('product_in_event')
->from('AppBundle:ProductInTheme', 'product_in_theme')
->where('product_in_theme.theme = :theme')
->setParameter('theme', $theme);
}
));
}
查询是:
SELECT p0_.id AS id_0, p0_.price AS price_1, p0_.event_id AS event_id_2, p0_.product_id AS product_id_3
FROM product_in_event p0_, product_in_theme p1_
WHERE p1_.theme_id = 27;`
其中 returns 0 个条目(因为 product_in_event 为空)
Update 2015/02/01
I've some entities:
Product:
-Id, Name, quantity, price
Event:
Id, Name, Products (mapped by product_id in product_in_event)
Product_In_Event:
Id, Event_id, Product_id (inversed by products in Event)
Theme
Id, Name, Products (mapped by theme_id)
Product_in_theme:
Id, Product_id, Theme_id (inversed by products in theme)
这是一个共同的联系:活动中的产品有一些与活动和产品相关的FK。
您可以查看以下情况:类别和产品。当你买东西时,"product_in_category" 变成了 "product_in_order"
如果我理解正确,您想查询 ProductInThemes
的列表并将其中一些元素附加到 Events
中的 products
属性(这应该是一个列表ProductInEvents
)。这绝对不可能,因为这两种实体是不一样的。
我认为您的模型与您想要实现的目标不兼容。如果 ProductInTheme
和 ProductInEvent
都是同一类项目的表示,但每个都附加了不同的实体类型,为什么不创建一个 Product
实体,创建多对- Products
和Themes
之间以及Products
和Events
之间的许多关系,然后在你的query_builder中操纵Products
?您仍然可以根据 Events
和 Themes
过滤 query_builder 中的那些 Products
以匹配您想要的内容。
TL;DR:除非我误解了您的问题,否则那是概念问题,而不是实施问题。尝试修改您的模型以更好地满足您的需求。
我还是 Symfony 的新手,我正在尝试一些(我认为)常见的东西。
我有一些实体:产品、主题、事件,具有一对多和多对一的连接;所以我还有其他名为 products_in_theme、products_in_event 的实体。 主题是一种派对,使用某种产品(如颜色、纸张等)。 当我举办活动时,我需要所有或部分产品,我需要将这些产品保存在 products_in_event 中。 使用 CraueFormFlowBundle 我创建了表单(第 1 步:select 主题和日期,第 2 步:select 产品)。 问题是:我需要在 EntityType "Product in Event" 中显示(为了坚持),来自 "Product In Theme" 的值。 查询不起作用,因为从 "product in event" 而不是仅 "product in theme"
public function buildForm(FormBuilderInterface $builder, array $options)
{
$theme= $options['theme'];
$builder
->add('products', EntityType::class, array(
'class' => 'AppBundle\Entity\ProductInEvent',
'expanded'=>'true',
'multiple' => 'true',
'query_builder' => function (EntityRepository $er) use ($theme){
return $er->createQueryBuilder('product_in_event')
->from('AppBundle:ProductInTheme', 'product_in_theme')
->where('product_in_theme.theme = :theme')
->setParameter('theme', $theme);
}
));
}
查询是:
SELECT p0_.id AS id_0, p0_.price AS price_1, p0_.event_id AS event_id_2, p0_.product_id AS product_id_3
FROM product_in_event p0_, product_in_theme p1_
WHERE p1_.theme_id = 27;`
其中 returns 0 个条目(因为 product_in_event 为空)
Update 2015/02/01
I've some entities:
Product:
-Id, Name, quantity, price
Event:
Id, Name, Products (mapped by product_id in product_in_event)
Product_In_Event:
Id, Event_id, Product_id (inversed by products in Event)
Theme
Id, Name, Products (mapped by theme_id)
Product_in_theme:
Id, Product_id, Theme_id (inversed by products in theme)
这是一个共同的联系:活动中的产品有一些与活动和产品相关的FK。
您可以查看以下情况:类别和产品。当你买东西时,"product_in_category" 变成了 "product_in_order"
如果我理解正确,您想查询 ProductInThemes
的列表并将其中一些元素附加到 Events
中的 products
属性(这应该是一个列表ProductInEvents
)。这绝对不可能,因为这两种实体是不一样的。
我认为您的模型与您想要实现的目标不兼容。如果 ProductInTheme
和 ProductInEvent
都是同一类项目的表示,但每个都附加了不同的实体类型,为什么不创建一个 Product
实体,创建多对- Products
和Themes
之间以及Products
和Events
之间的许多关系,然后在你的query_builder中操纵Products
?您仍然可以根据 Events
和 Themes
过滤 query_builder 中的那些 Products
以匹配您想要的内容。
TL;DR:除非我误解了您的问题,否则那是概念问题,而不是实施问题。尝试修改您的模型以更好地满足您的需求。