gpt4 book ai didi

php - Doctrine - 存储 ArrayCollection 键

转载 作者:可可西里 更新时间:2023-11-01 12:35:37 26 4
gpt4 key购买 nike

每当我将 ArrayCollection 与 Doctrine ORM(2.3,PHP > 5.4)一起使用,并将对象值与集合中的键相关联(例如使用 set 方法时),值得到正确存储在数据库中。但是当我想从实体中检索集合时,键没有被检索到,而是使用数字索引。

例如,如果我有以下类:

/** @Entity */
class MyEntity
{
/** @OneToMany(targetEntity="MyOtherEntity", mappedBy="mainEntity") */
private $myArray;

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

public function addOtherEntity($key, $value)
{
$this->myArray->set($key, $value);
}

...
}

/** @Entity */
class MyOtherEntity
{
/** @ManyToOne(targetEntity="MyEntity", inversedBy="myArray") */
private $mainEntity;
...
}

set 方法工作正常,但是当我检索信息时,$myArray 中的键消失了。

如何让 ORM 正确记住键?预先谢谢你。

最佳答案

解决方法如下:

/** @Entity */
class MyEntity
{
/** @OneToMany(targetEntity="MyOtherEntity", mappedBy="mainEntity", indexBy="key") */
private $myArray;

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

public function addOtherEntity($key, $value)
{
$this->myArray->set($key, $value);
}

...
}

/** @Entity */
class MyOtherEntity
{
/** @ManyToOne(targetEntity="MyEntity", inversedBy="myArray") */
private $mainEntity;

/** @Column(name="MyOtherTable_Key", type="string", unique=true, length=50)
private $key;
...
}

您的数据库架构中还需要 MyOtherTable_Key,以便它可以正确存储 key 。

请记住始终将对象键设置到属性中。一种方法是在构造函数中声明 key 。

public function __construct($key)
{
$this->key = $key;
}

关于php - Doctrine - 存储 ArrayCollection 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17303742/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com