2017-12-15 12 views
1

2つのDAOの間に1対多/多対1の関係をしたい。OneToMany/ManyToOneの教義関係でネストされたオブジェクトを取得する

プロパティをアノテーションした後、結果に予期せぬ無制限のオブジェクトがあります。

/** 
* TicketSponsorDAO 
* 
* @ORM\Table(name="ticket_sponsor") 
* @ORM\Entity 
*/ 
class TicketSponsorDAO { 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="ticket_id", type="integer") 
    */ 
    private $ticketId; 

    /** 
    * @ORM\ManyToOne(targetEntity="TicketDAO", inversedBy="sponsors") 
    * @ORM\JoinColumn(name="ticket_id", referencedColumnName="id") 
    */ 
    private $ticket; 

    ... 
} 

そして

/** 
* TicketDAO 
* 
* @ORM\Table(name="ticket") 
* @ORM\Entity 
*/ 
class TicketDAO 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\OneToMany(targetEntity="TicketSponsorDAO", mappedBy="ticket") 
    */ 
    private $sponsors; 

    public function __construct() { 
     $this->sponsors = new ArrayCollection(); 
    } 
    ... 
} 

私が実行:

$sponsorEm = $em->getRepository(TicketDAO::class); 
$spo = $sponsorEm->find("2"); 
var_dump($spo); 

私はチケットDAOについての良好な特性を持っていますが、関係がうまくいかないと、私はある無限のオブジェクトを持っています戻ってきた。

したがって、MySQLデータベースでは、私はここにある外部キー、FKインデックス、およびプライマリキーを持っています。

のvar_dump:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-many-bidirectional

+0

symfonyからダンプで試すことはできますか?あなたは循環参照内にあるかもしれません – albert

+0

@albertあなたは正しくありません。var_dumpが管理していないチケットからスポンサーを表示すると再帰があります。ダンプはOKです – mickaelw

+0

私は答えとして追加しましたので、近くにマークすることができます。私は非常にIDEを取得し、デバッガを使用することを学ぶことをお勧めします。 – albert

答えて

0

一つのオブジェクトは多くのオブジェクトに参照されるので、それはOneToMany/ManyToOne関係を持つロジックだオブジェの間に再帰があり、...

のvar_dumpはそれを正しく管理しません。

オブジェクトを表示するには、symfonyのdumpを使用してください。

ダンプがブラウザに表示されている場合は、__toStringreturn serialize($this)とDAOクラスに追加できます。あなたが循環参照を持っているよう

... ENTITY could not be converted to string ...

0

こんにちはのvar_dump()オブジェクトとクラスのあなたのタイプを返します。 enter image description here

私は、このマニュアルに従ってください。

あなたはそれがあなたの配列を返しますか集合であってもよい。この

$spo->getSponsers(); 

ようpropertesを取得しようとする必要があります。

0

私の場合は、1つのチケットにスポンサーがたくさんいるように見えます。この場合、問題は1つしかありません。 TicketSponsorDaoテーブルにauto_increment idはありませんが、ticket_id列があり、その目的を理解できません。

/** 
* TicketSponsorDAO 
* 
* @ORM\Table(name="ticket_sponsor") 
* @ORM\Entity 
*/ 
class TicketSponsorDAO { 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    ... 
} 
+0

私の自動応答を確認してください。ここでの問題は、var_dumpが関係の再帰を正しく管理していないことです。OneToMany/ManyToOne – mickaelw

2

使用symfonyのダンパー:

はそうでなければ、我々はエラーを持っています。

dump($spo); 
+0

はい、私はヒントのために自分の答えを返すよ! – mickaelw

関連する問題