【问题标题】:Allow null values in ManyToOne inversed entity在 ManyToOne 反转实体中允许空值
【发布时间】:2015-08-13 15:40:47
【问题描述】:

我有这个实体:

class Brand
{
    ...

    /**
     * @var Company
     * @ORM\ManyToOne(targetEntity="Company", inversedBy="brands")
     * @ORM\JoinColumn(name="companies_id", referencedColumnName="id", nullable=true)
     */
    protected $company;

    ...

    /**
     * Set company.
     *
     * @param Company $company
     *
     * @return Brands
     */
    public function setCompany(Company $company)
    {
        $this->company = $company;
        return $this;
    }
}

如果我从方法签名中删除 Company 类型提示,我会收到以下错误:

可捕获的致命错误:参数 1 传递给 AppBundle\Entity\Brand::setCompany() 必须是 AppBundleEntity\Company,给定 null,调用 /var/www/html/backend/vendor/symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyAccessor.php 在第 410 行并定义

我将属性设置为nullable,但我无法从数据中删除对象,为什么?如何解决这个问题?

【问题讨论】:

  • 这听起来像是缓存的问题。错误在于您说您修改的方法。如果您正在使用 Zend OPCache 之类的东西,请尝试重新启动/禁用它。似乎使用了旧的类定义。注意:您也可以使用setCompany(Company $company=null) 来保持类型安全并允许空值。
  • @Anonymous 有效,我刚刚重新启动了我的网络服务器并清除了缓存(我之前被清除了),一切都很好,谢谢,顺便说一句,我怎么知道我是否正在使用任何类型的缓存?
  • 我会写一个完整的答案是一分钟。

标签: php symfony doctrine-orm symfony-2.7


【解决方案1】:

这听起来像是缓存的问题。错误在于您说您修改的方法。如果您正在使用 Zend OPCache 之类的东西,请尝试重新启动/禁用它。似乎使用了旧的类定义。

注意:您也可以使用setCompany(Company $company=null) 来保持类型安全并允许空值(PHP 5.1+)


检查您启用的内容的最简单方法是检查您的phpinfo() 输出。如果您使用的是 OPCache,您会在其中看到它。这是我的开发环境的配置(php.ini):

[OPCACHE]
zend_extension="php_opcache.dll"
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=0
opcache.fast_shutdown=1
opcache.enable_cli=1
opcache.validate_timestamps=1

最后一个选项很重要——它会重新读取所有已更新的文件。在生产中,您可能希望将其设置为零(并将opcache.revalidate_freq 设置为零)以减少磁盘访问。 See more settings here.

虽然 APC 之类的东西仍然有效,但内置的 Zend OPCache 是在 PHP 5.5+ 上继续前进的方式,所以如果可以的话,我建议切换。

【讨论】:

    【解决方案2】:

    只需修改 setCompany 方法,如下所示

    public function setCompany(Company $company=null)
    {
        $this->company = $company;
        return $this;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 1970-01-01
      • 2019-01-14
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多