如何在jsonSerialize方法中获取序列化的cardPrices? id与CardPrice有OneToMany
的关系,但如何获得此价格? 'price' => $this->getId()->getPriceNet()
不起作用。
CustomerCardSubtype.php
class CustomerCardSubtype implements \JsonSerializable
{
/**
* Primary key.
*
* @var int
*
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\OneToMany(targetEntity="CardPrice", mappedBy="customerCardSubtype")
*/
private $id;
/**
* @return array
*/
public function jsonSerialize()
{
return [
'id' => $this->getId(),
'description' => $this->getDescription(),
'name' => $this->getName()
];
}
CardPrice.php
class CardPrice implements \JsonSerializable
{
/**
* CustomerCardSubtype.
*
* @var CustomerCardSubtype
*
* @ORM\ManyToOne(targetEntity="CustomerCardSubtype")
* @ORM\JoinColumn(name="customer_card_subtype_id", referencedColumnName="id", nullable=false, onDelete="RESTRICT")
*/
private $customerCardSubtype;
/**
* Get priceNet.
*
* @return float
*/
public function getPriceNet()
{
return $this->priceNet;
}
答案 0 :(得分:1)
您误解了Doctrine Association Mapping的用法; id
应该是(并且是)一个整数,因此您无法在其上调用方法。这不起作用:
'price' => $this->getId()->getPriceNet()
相反,为关联本身创建一个属性(以及可选的get / set方法)。
您的CustomerCardSubtype
应该是这样的:
<?php
class CustomerCardSubtype implements \JsonSerializable
{
/**
* Primary key.
*
* @var int
*
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* Association.
*
* @ORM\OneToMany(targetEntity="CardPrice", mappedBy="customerCardSubtype")
*/
private $cardPrice;
/**
* @param CardPrice $cardPrice
*/
public function setCardPrice($cardPrice)
{
$this->cardPrice = $cardPrice;
}
/**
* @return CardPrice
*/
public function getCardPrice()
{
return $this->cardPrice;
}
/**
* @return array
*/
public function jsonSerialize()
{
return [
'id' => $this->getId(),
'description' => $this->getDescription(),
'name' => $this->getName(),
'price' => $this->cardPrice->getPriceNet()
];
}
}
您现在应该能够在关联对象上调用getPriceNet
方法。如果您希望json_encode
整个CardPrice
对象作为嵌套元素,您也可以在其上实现JsonSerializable
。希望这可以帮助。