getOneToMany返回存储库

时间:2013-01-31 16:56:48

标签: php symfony doctrine doctrine-orm entity

执行以下代码会产生以下错误:

  

警告:为foreach()提供的参数无效

$stock = $offerDetail->getStock();
foreach($stock as $s)
{
    ...
}

返回的股票是 offerDetailRepository

这是我在offerDetail中定义的关系:

/**
* @ORM\OneToMany(targetEntity="OfferDetailStock", mappedBy="offerDetail", cascade={"remove"})
 */
protected $stock;

并在OfferDetailStock中

/**
* @ORM\ManyToOne(targetEntity="Powershop\ApplicationBundle\Entity\OfferDetail", inversedBy="stock")
*/
protected $offerDetail;

我在OfferDetail中生成的一些函数:

public function getStock()
{
    return $this->stock;
}

public function setStock($stock)
{
    $this->stock = $stock;
}

public function addStock($stock)
{
    $this->stock[] = $stock;
}

在OfferDetailStock中

public function getOfferDetail() {
    return $this->offerDetail;
}

public function setOfferDetail($offerDetail) {
    $this->offerDetail = $offerDetail;
}

有人有线索吗?据我所知,关系是正确定义的。 我不得不提到最初有一个与类库存的ManyToMany关系,我之后将OfferDetailStock作为一个表格。我确实清除了缓存并更新了方案。

感谢您的提前帮助

2 个答案:

答案 0 :(得分:2)

在您的控制台中输入:

php app/console doctrine:generate:entities PowershopApplicationBundle:OfferDetail

它将生成缺少的构造函数:

public function __construct()
{
    $this->stock = new \Doctrine\Common\Collections\ArrayCollection();
}

答案 1 :(得分:1)

在您的OfferDetail实体构造函数中添加:

public function __construct()
{
    $this->stock = new \Doctrine\Common\Collections\ArrayCollection();
}

也许offerdetails没有股票,getStocks返回null。