0

「注文」と「住所」という2つのエンティティフォームがあります。住所フォームを注文フォームに埋め込みたい。両方のエンティティは、ユーザー列ごとに関係があります。

アドレスエンティティ

class Address
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", length=128)
     */
    protected $type;    

    /**
     * @ORM\ManyToOne(targetEntity="Root\UserBundle\Entity\User", inversedBy="address")
     * @ORM\JoinColumn(name="user", referencedColumnName="id")
     * @ORM\ManyToOne(targetEntity="Orders", inversedBy="address")
     * @ORM\JoinColumn(name="user", referencedColumnName="user")
     */     
    protected $user;       

注文エンティティ

class Orders
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", length=128)
     */
    protected $status;    

    /**
     * @ORM\ManyToOne(targetEntity="Root\UserBundle\Entity\User", inversedBy="orders")
     * @ORM\JoinColumn(name="user", referencedColumnName="id")
     * @ORM\OneToMany(targetEntity="Address", mappedBy="orders")
     * @ORM\JoinColumn(name="user", referencedColumnName="user")
     */     
    protected $user;     

注文フォーム

namespace Root\ContestBundle\Form\Front;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Root\ContestBundle\Entity\Address;
use Root\ContestBundle\Form\Front\AddressType;
class OrdersType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('address', 'collection', array('type' => new AddressType()));
        $builder
        ->add('termsAccepted');

    }

しかし、私は以下のようなエラーが発生しています

An exception has been thrown during the rendering of a template ("Neither property "address" nor method "getAddress()" nor method "isAddress()" exists in class "Root\ContestBundle\Entity\Orders"") 

それで、私が自分のコードでどのような間違いを犯したのか。手伝ってください

4

1 に答える 1

3

手遅れかもしれませんが、ここに私の答えがあります。私は数日前にsymfonyを発見したので、私は専門家ではありません。私には気まずいことがいくつかあります。

Adress Entityでは、そうすべきだと思います:

/** @ORM\OneToMany(targetEntity="Order", mappedBy="adress") */
protected $orders; 

public function addOrder(Order $order){
    $this->orders[] = $order;
}

public function removeOrder(Order $order){
    $this->orders->removeElement($order);
}

public function getOrders(){
    return $this->orders;
}

注文エンティティでは、私はあなたがそれを持っているべきだと思います:

/**
 * @ORM\ManyToOne(targetEntity="Address", inversedBy="orders")
 * @ORM\JoinColumn(name="idAdress", referencedColumnName="id")
 */     
protected $adress;

public function setAdress($adress){
    $this->adress = $adress;
}

public function getAdress(){
    return $this->adress;
}

そして最後にOrderTypeを使用すると、次のようになります。

public function buildForm(FormBuilderInterface $builder, array $options){
    $builder->add('adress',new AdressType());
}

それがあなたを助けることを願っています。

于 2013-03-03T12:07:48.757 に答える