に入社し、単純結合どうあるべきかとの問題を抱えていますトラブルがテーブル私は教義2.1に教義1.2から移行しています
これが私の最初のテーブルです:
/**
* Model_WBS
*
* @Table(name="WBS")
* @Entity
*/
class Model_Wbs
/**
* @var integer $id
*
* @Column(name="id", type="integer", length=8)
* @Id
* @GeneratedValue(strategy="SEQUENCE")
* @SequenceGenerator(sequenceName="wbs_seq_seq", allocationSize=1, initialValue=1)
*/
public $id;
.
.
.
/**
* @var \Doctrine\Common\Collections\ArrayCollection
*
* @OneToMany(targetEntity="Model_WbsFund", mappedBy="id")
* @JoinColumn(name="id", referencedColumnName="wbs_id")
*/
public $wbsfunds;
そして、これは私の第二でありますここでは、テーブル
/**
* Model_WbsFund
*
* @Table(name="WBS_FUNDS")
* @Entity
*/
class Model_WbsFund
/**
* @var integer $id
*
* @Column(name="id", type="integer", length=8)
* @Id
* @GeneratedValue(strategy="SEQUENCE")
* @SequenceGenerator(sequenceName="wbs_funds_seq_seq", allocationSize=1, initialValue=1)
*/
public $id;
/**
* @var integer $wbs_id
*
* @Column(name="wbs_id", type="integer", length=8)
*/
public $wbs_id;
.
.
.
/**
* @var \Doctrine\Common\Collections\ArrayCollection
*
* @ManyToOne(targetEntity="Model_Wbs", inversedBy="wbs_id")
* @JoinColumn(name="wbs_id", referencedColumnName="id")
*/
public $WBS;
そして、私の簡単なテストである
$testEntity = Model_Wbs::find(7185);
foreach($testEntity->getwbsfunds() as $wbsfundobj){
print("<br/>");
print($wbsfundobj->FUND->getFundCode()." -- ".$wbsfundobj->WBS->getWbs());
}
私は最初に検索したwbsに関連付けられているwbsfundsテーブルのファンドコードとwbsを見ることになります。 (私はWBS-> getWbs()を使って、実際にwbs id 7185に関連した資金しか得られていないかどうかを確認しました)。
代わりに、私はすべてのwbs_fundsレコードを取得します。私は、生成されたクエリステートメントの教義をプリントアウトし、それは正しくないのです
SELECT t0.id AS ID1, t0.wbs_id AS WBS_ID2, t0.fund_id AS FUND_ID3, t0.wbs_id AS WBS_ID4, t0.fund_id AS FUND_ID5 FROM WBS_FUNDS t0
興味深いのは、wbsfundobj-> WBS-> getWBSがそうであるようにwbsfundobj-> FUND-の間のリンク> geFundCodeは、()(、素晴らしい作品ということです)、WBSからWBS_FUNDSへのリンクは間違っているようです。
公開された属性の代わりに保護された属性を使用することをお勧めします。 http://stackoverflow.com/questions/4090609/how-can-public-fields-break-lazy-loading-in-doctrine-2 – Florian