如何在 OneToOne 关系实体中注入变量

how to inject a variable in a OneToOne relation entity

我有一个文件实体用于处理其他实体中的文件上传 (news/blog/etc)。

我用 OneToOne 关系指向它,它工作正常。但我会为每个关系实体更改上传目录:

upload/news
upload/blog

上传路径设置在我的文件实体中,所以我不知道如何自动更新每个关系的路径...
你知道怎么做吗?
谢谢

当然可以。 在您的文件实体端,您可以添加一个 uploadDir 属性,并创建一个 setter 像这样:

private $uploadDir;

public function setUploadDir($uploadDir)
{
    if (!$this->uploadDir) {
        $this->uploadDir = $uploadDir;
    }
}

您的评论建议您使用 Symfony 和 Doctrine,对吗?

因此您可以像这样编辑经典的 getUploadDir() 方法:

protected function getUploadDir()
{
    return 'uploads/' . $this->uploadDir;
}

在 'parent' 实体中,您必须在保留或更新之前更新此属性(创建时)。

(我个人使用生命周期回调,但您可以在控制器中手动执行)

use Doctrine\ORM\Mapping as ORM;
/**
 * News
 *
 * @ORM\Table(name="News")
 * @ORM\HasLifecycleCallbacks
 */
class News
{ 
    //....

/**
 * @ORM\OneToOne(targetEntity="File",cascade={"persist","remove"})
 */
private $file;

/**
 * @ORM\PrePersist()
 * @ORM\PreUpdate()
 */
function setUploadDir()
{
    $this->getFile()->setUploadDir('news');
}
// ....

您还可以添加一个常量来使代码更简洁... 希望对你有所帮助