0
看看下面的模型:學說越權關係
class Team
/**
* @id
* @ManyToOne(targetEntity="Person")
* @JoinColumn(name="id_manager", referencedColumnName="id")
*/
protected $manager;
/**
* @id
* @ManyToOne(targetEntity="Stadium")
* @JoinColumn(name="stadium", referencedColumnName="stadium")
*/
protected $stadium;
當我使用數組hidration查詢團隊我做的:
$qb->select(['a', 'b', 'c']);
$qb->from(Team::class, 'a');
$qb->leftJoin('a.manager', 'b');
$qb->leftJoin('a.stadium', 'c');
$teams = $qb->getQuery()->getArrayResult();
對於每個團隊結構是這樣的:
[
"id_manager": 3,
"manager": [
"id": 3,
"name": "Billy"
],
"stadium": 8
]
看看「manager」是如何作爲一個數組加載(如預期的那樣),而是「體育場」。在第一個符號看起來,如果關係字段與保留列值的列名稱相同。有沒有辦法避免這種情況,而不重命名字段$stadium
列?
PS:$qb->select(['a', 'b', 'c as stadium2']);
沒有工作。
編輯我注意到,如果我刪除@id
註釋,我會得到預期的結構。
我完全同意'主鍵是一個外鍵同時不推薦'。但我正在一個統一數據庫下工作,主鍵是以這種方式分配的 – manix
但是,您可以通過在Team和Manager之間建立OneToOne關係來解決這個問題。說實話,我不知道你的設置如何工作。唯一我能想象的是原始團隊根本沒有主鍵。 – LBA
問題是,以某種方式,id關係不能作爲關係加載,而是作爲字段加載。 – manix