2012-03-22 14 views
2

私の現在のクライアントエンティティにはアンロードとロードの両方の領域があり、どちらもClientArea-Entitiesです。Symfony2/Doctrine2 1対多数の同じオブジェクト

namespace ACME\DemoBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Sorien\DataGridBundle\Grid\Mapping as GRID; 
use Symfony\Component\Validator\Constraints as Assert; 
use Doctrine\Common\Collections\ArrayCollection; 

/** 
* ACME\DemoBundle\Entity\Client 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="ACME\DemoBundle\Entity\ClientRepository") 
*/ 
class Client 
{ 
enter code here/** 
* @ORM\OneToMany(targetEntity="ClientArea",mappedBy="client", cascade={"persist", "remove"}) 
*/ 
public $unloading_areas; 

/** 
* @ORM\OneToMany(targetEntity="ClientArea",mappedBy="client", cascade={"persist", "remove"}) 
*/ 
public $loading_areas; 
} 

_

class ClientArea 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="Client") 
    */ 
    public $client; 
} 

クライアントのみ1つの関連をマッピングすることができますので、これは動作しません。 関係を適切にマップするにはどうすればよいですか?

答えて

1

エンティティリレーションを作成するには、テーブルを結合するときに使用するキーが必要です。クライアントクラスは定義されてidキーを持っている必要がありますし、コレクションを初期化する必要があり、このように:

class Client 
{ 
    //.... 

    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @ORM\OneToMany(targetEntity="ClientArea", mappedBy="client", cascade={"persist", "remove"}) 
    */ 
    public $unloading_areas; 

    /** 
    * @ORM\OneToMany(targetEntity="ClientArea", mappedBy="client", cascade={"persist", "remove"}) 
    */ 
    public $loading_areas; 

    public function __construct() { 
     // Initialize collections 
     $this->unloading_areas = new \Doctrine\Common\Collections\ArrayCollection(); 
     $this->loading_areas = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    // .... 
} 

あなたClientAreaクラスは、このようなものになります。今

class ClientArea 
{ 
    // .... 

    /** 
    * @ORM\Column(name="client_id", type="int", nullable=false) 
    */ 
    private $clientId; 

    /** 
    * @ORM\ManyToOne(targetEntity="Client") 
    * @JoinColumn(name="client_id", referencedColumnName="id") 
    */ 
    public $client; 

    // .... 
} 

を、これら2つのエンティティはする必要があります正しくマップされます。 Doctrineのアソシエーションマッピングの詳細については、こちらの記事をご覧ください:http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/association-mapping.html

関連する問題