gpt4 book ai didi

php - 获取 blob 类型的 Doctrine 实体属性只返回一次数据

转载 作者:行者123 更新时间:2023-12-05 08:58:06 24 4
gpt4 key购买 nike

我使用 Doctrine 将选项/奇数数据的各种位存储在一个数组中,并将其序列化到数据库中,并在数据库中将其作为 blob 存储。一切正常,直到今天我不得不两次获取该数组并注意到它仅在第一次获得正确的值。任何连续的尝试都会返回 false,这是 unserialize/stream_get_contents 在失败时返回的内容。

我最好的猜测是 doctrine 在获取数据后关闭流,但这没有多大意义。我需要数据在整个请求过程中可用。我不是流方面的专家,所以:

如何多次获取 blob 数据或防止流关闭?

Doctrine 实体及其方法:

/**
* @var resource
*
* @ORM\Column(name="options", type="blob")
*/
private $options;

/**
* Set options
*
* @param array $options
*
* @return Campaign
*/
public function setOptions($options)
{
$this->options = serialize($options);

return $this;
}

/**
* Get options
*
* @return array
*/
public function getOptions()
{
return unserialize(stream_get_contents($this->options));
}

检索序列化选项数组:

$campaign   = $this->em->getRepository('TreasureForgeMessageBundle:Campaign')->find(1);
$options1 = $campaign->getOptions(); // Correct options array
$options2 = $campaign->getOptions(); // false
$options3 = $campaign->getOptions(); // false

非常感谢!

最佳答案

您遇到的问题是因为您没有rewind()您在读取操作之间的句柄。

但是,考虑到性能,在每次访问时反序列化选项数组是一个坏主意。 $options 字符串必须在每次访问时转换为数组。相反,你应该告诉 doctrine $options 是一个数组,只有当数据从数据库读取和写入时,它才会自动序列化和反序列化:

/**
* @var array
*
* @ORM\Column(name="options", type="array")
*/
private $options;

/**
* Set options
*
* @param array $options
*
* @return Campaign
*/
public function setOptions($options)
{
$this->options = $options;

return $this;
}

/**
* Get options
*
* @return array
*/
public function getOptions()
{
return $this->options;
}

更新:

Doctrine 数组类型描述here .

关于php - 获取 blob 类型的 Doctrine 实体属性只返回一次数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26303513/

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