我有一个从数据库中提取实体的查询。其中一个字段是“filename”。我的模型也知道web路径,并且有一个函数“getPath()”,它返回带有相关路径的文件名。
目前,我的数组返回如下:
Array
(
[id] => 359
[thumb] => sound_thumb.png
...
)
但我希望它是这样的:
Array
(
[id] => 359
[thumb] => sound_thumb.png
[path] => /path/to/file/sound_thumb.png
...
)
有没有办法用$query->getArrayResult();
来实现这个目标?
答案 0 :(得分:1)
不,您必须直接在您的实体中执行此操作。关于文件上传有一个很棒的部分here(以下代码是从本节中提取的,也是我通常用来处理实体中文件路径的代码)。基本上,您可以添加一个getAbsolutePath()
方法,您可以调用该方法来获取拇指的绝对路径。
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
public $path;
public function getAbsolutePath()
{
return null === $this->path
? null
: $this->getUploadRootDir().'/'.$this->path;
}
public function getWebPath()
{
return null === $this->path
? null
: $this->getUploadDir().'/'.$this->path;
}
protected function getUploadRootDir()
{
// the absolute directory path where uploaded
// thumbs should be saved
return __DIR__.'/../../../../web/'.$this->getUploadDir();
}
protected function getUploadDir()
{
// get rid of the __DIR__ so it doesn't screw up
// when displaying uploaded doc/image in the view.
return 'uploads/thumbs';
}
现在,您需要在查询中返回一个对象数组,并且您可以通过调用$object->getAbsolutePath()
来访问绝对路径。
如果您确实需要使用$query->getArrayResult()
返回数组:
1 创建一个属性$absolutePath
2 每次更改路径时都会使用prePersist和preUpdate lifecycle events更新$absolutePath
。
/**
* @ORM\Column(type="string", nullable=true)
*/
public $absolutePath;
/**
* @ORM\PrePersist
* @ORM\PreUpdate
*/
public function updateAbsolutePath()
{
$this->absolutePath = $this->getAbsolutePath();
}
现在,您应该:
Array
(
[id] => 359
[thumb] => sound_thumb.png
[path] => sound_thumb.png
[absolutePath] => /path/to/file/sound_thumb.png
...
)