2つの単純なオブジェクトを設定しようとしていますPurchase
とAddress
。アドレスエンティティから1対多のクリティカル - 未知のPHP例外Symfony Component PropertyAccess Exception NoSuchPropertyException
つ購入複数のアドレス(購入アドレス、請求書のアドレス)を持つことができ
簡体ORMは、次のようになります。
X\Entity\Purchase:
repositoryClass: X\Repository\PurchaseRepository
type: entity
oneToMany:
addresses:
targetEntity: Address
mappedBy: purchase
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
quantity:
type: integer
orderedAt:
type: datetime
toBeDeliveredAt:
type: datetime
lifecycleCallbacks: { }
:購入エンティティから
X\Entity\Address:
repositoryClass: X\Repository\AddressRepository
type: entity
manyToOne:
purchase:
targetEntity: Purchase
inversedBy: addresses
joinColumn:
name: purchase_id
referencedColumnName: id
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
firstname:
type: string
length: 255
email:
type: string
length: 255
lifecycleCallbacks: { }
簡体ORMは次のようになります
購入クラスのこれらの行でエラーが発生します
言っ:
どちらのプロパティ "アドレス" も方法の一つ "のgetAddress()"、 "アドレスを()"、 "isAddress()"、 "hasAddress()"、 "__get()"が存在し、クラス "X \ Entity \ Purchase"に パブリックアクセスがあります。
これは絶対に正しいですが、プロパティaddress
はありません。その存在しないプロパティのメソッドはありません。
問題の種類は、プロパティ名はaddresses
で、方法はgetAddresses
ですが、問題が発生します。
ここで、「システム」(symfony?)がプロパティ名address
を検索するのはなぜですか?もちろん、どうすればこの問題を解決できますか?
更新
エラーがフォーム送信で発生します。コントローラは、次のようになります。
class DefaultController extends Controller
{
public function indexAction(Request $request)
{
$purchase = new Purchase();
$form = $this->createFormBuilder($purchase)
->add('address', AddressType::class)
->add('quantity', IntegerType::class)
->add('toBeDeliveredAt', DateType::class)
->add('comment', TextareaType::class)
->add('save', SubmitType::class, array('label' => 'Submit'))
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($purchase);
$em->flush();
}
return $this->render('X:Default:index.html.twig', array(
'form' => $form->createView(),
));
}
}
そしてAddressTypeには、次のようになります助けるため
class AddressType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('firstname', TextType::class)
->add('email', EmailType::class);
}
}
ありがとう!必要に応じて
は全体の購入のクラスは次のようになります。
<?php
namespace X\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* Purchase
*/
class Purchase
{
/**
* @var int
*/
private $id;
/**
* @var int
*/
private $quantity;
/**
* @var \DateTime
*/
private $orderedAt;
/**
* @var \DateTime
*/
private $toBeDeliveredAt;
/**
* @var bool
*/
private $delivered;
/**
* @var \DateTime
*/
private $deliveredAt;
/**
* @var bool
*/
private $payd;
/**
* @var \DateTime
*/
private $paydAt;
/**
* @var string
*/
private $comment;
/**
* @var \Doctrine\Common\Collections\Collection
*/
private $addresses;
/**
*
*/
public function __construct()
{
$this->addresses = new ArrayCollection();
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set quantity
*
* @param integer $quantity
* @return Purchase
*/
public function setQuantity($quantity)
{
$this->quantity = $quantity;
return $this;
}
/**
* Get quantity
*
* @return integer
*/
public function getQuantity()
{
return $this->quantity;
}
/**
* Set orderedAt
*
* @param \DateTime $orderedAt
* @return Purchase
*/
public function setOrderedAt($orderedAt)
{
$this->orderedAt = $orderedAt;
return $this;
}
/**
* Get orderedAt
*
* @return \DateTime
*/
public function getOrderedAt()
{
return $this->orderedAt;
}
/**
* @param \DateTime $toBeDeliveredAt
*/
public function setToBeDeliveredAt($toBeDeliveredAt)
{
$this->toBeDeliveredAt = $toBeDeliveredAt;
}
/**
* @return \DateTime
*/
public function getToBeDeliveredAt()
{
return $this->toBeDeliveredAt;
}
/**
* @param Address $address
* @return Address
*/
public function addAddress(Address $address)
{
$this->addresses[] = $address;
if($address->getPurchase() !== $this) {
$address->setPurchase($this);
}
return $this;
}
/**
* @return \Doctrine\Common\Collections\Collection
*/
public function getAddresses()
{
return $this->addresses;
}
}
このエラーはありますか?フォームの送信に – DOZ
@DOZは、私はよく分からないが、なぜ使用していない – caramba
@DOZ問題の部品が含まれます - >(「アドレス」)を追加しますか? – caramba