学说2映射一对多/多对一

时间:2014-07-14 13:35:14

标签: php mysql doctrine-orm

我将我的申请表从doctrine1转换为doctrine2.4 我确实从数据库中自动映射,并且我错过了一些关系:

表:产品 产品,标题,价格

表:LocationProducts id,productid,loctionid,qty

所以每个LocationProducts行都有1个产品,每个产品可以在几个位置

在我获得的locationproducts类下的映射:

 /**
 * @var \Products
 *
 * @ORM\ManyToOne(targetEntity="Products")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="productid", referencedColumnName="productid")
 * })
 */
private $productid;

在产品模型中我没有关系,我试图添加它但它失败了:它表示productid映射已经存在

这是我的目标查询:

$qb = $em->createQueryBuilder()
    ->select('p.productid,lp.qty AS totalqty')
    ->from('Products','p')
    ->innerJoin('p.LocationProducts','lp')
    ->setFirstResult( $offset )
    ->setMaxResults( $limit )
    //getDQL
    ->getQuery();

并返回错误:

Class Products has no association named LocationProducts

我缺少什么? 感谢。

2 个答案:

答案 0 :(得分:1)

您缺少map属性注释。

<?php
/**
 * @OneToMany(targetEntity="Phonenumber", mappedBy="user", cascade={"persist", "remove", "merge"}, orphanRemoval=true)
 */
public $phonenumbers;

请参阅此链接中的mappedBy: - http://docs.doctrine-project.org/en/2.0.x/reference/annotations-reference.html#annref-onetomany

希望这有帮助。

干杯!

答案 1 :(得分:0)

错误消息表明没有关联,因此您需要添加它。目前您的关系是单向的,您不能加入p.LocationProducts,因为它不存在。