Doctrine addJoinedEntityResult在oneToMany / manyToOne

时间:2017-12-09 22:51:47

标签: php symfony join doctrine-orm doctrine

我使用的是symfony 3.4.1,带有doctrine / orm 2.5.13。我有2张桌子。 storestore_product

Store实体中我有:

/**
 * @ORM\OneToMany(targetEntity="AppBundle\Entity\Store\Product", mappedBy="store")
 * @ORM\JoinColumn(name="store_id")
 */
private $products;

并且在Store\Product实体中我有复合索引(store_id,product_id)。我有:

/**
 * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Store", inversedBy="products")
 * @ORM\JoinColumn(name="store_id",referencedColumnName="id",nullable=false,onDelete="CASCADE")
 * @ORM\Id()
 * @ORM\GeneratedValue("NONE")
 * @var $store \AppBundle\Entity\Store
 */
protected $store;

/**
 * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Product", inversedBy="stores")
 * @ORM\JoinColumn(name="product_id",referencedColumnName="id",nullable=false,onDelete="CASCADE")
 * @ORM\Id()
 * @ORM\GeneratedValue("NONE")
 * @var $product \AppBundle\Entity\Product
 */
protected $product;

之前我使用guide制作了一个原生查询。它只从store表中获取条目,并且运行良好。

现在我正在尝试加入store_product表,但情况并不顺利。我使用以下查询返回1个结果。

SELECT st.id, st.name, stp.store_id, stp.product_id, stp.price FROM store st LEFT JOIN store_product stp ON st.id = stp.store_id WHERE st.id=1 LIMIT 1;

返回类似的内容:

 id |    name    | store_id | product_id | price 
----+------------+----------+------------+-------
  1 | Store Name |        1 | 1234567890 |   129

我按如下方式设置结果集映射:

    $rsm = new ResultSetMapping();
            $rsm->addEntityResult('AppBundle\Entity\Store', 'st');
            $rsm->addFieldResult('st', 'id', 'id');
            $rsm->addFieldResult('st', 'name', 'name');
            $rsm->addJoinedEntityResult('AppBundle\Entity\Store\Product', 'stp',
    'st', 'products');
            $rsm->addFieldResult('stp','store_id', 'store');
            $rsm->addFieldResult('stp','product_id','product');
            $rsm->addFieldResult('stp','price','price');

我收到错误:Notice: Undefined index: store任何人都可以看到错误的原因吗?

2 个答案:

答案 0 :(得分:0)

我设法在3个月后终于开始工作了。

显然,当我为联接表添加addFieldResult()的外键时,我犯了一个信任文档的错误。

我需要删除addFieldResult()和product_id`的store_id行,并添加如下:

    $rsm->addMetaResult('stp', 'store_id', 'store_id', true);
    $rsm->addMetaResult('stp', 'product_id', 'product_id', true);

addMetaResult()添加它们是不够的我还必须设置第3个参数为真。

即使documentation says Consequently, associations that are fetch-joined do not require the foreign keys to be present in the SQL result set, only associations that are lazy.

答案 1 :(得分:0)

对我有用的是使用startBtn.setStyle("-fx-border-width: 0 3 3 0;");中的addJoinedEntityFromClassMetadata而不是ResultSetMappingBuilder。使用the documentation中的示例:

addJoinedEntityResult