Php 原则2添加新关联时出现致命错误

Php 原则2添加新关联时出现致命错误,php,doctrine-orm,Php,Doctrine Orm,我有两个对象类,Session和Speaker,具有多对多关联。当我想将演讲者添加到会话中时,我使用以下代码: 109 $session->getSpeakers()->add($speaker); 110 $speaker->getSessions()->add($session); 这适用于现有会话。现在,当我实例化一个新会话,然后尝试以相同的方式添加演讲者时,会出现以下错误: Fatal error: Uncaught Error: Call to a

我有两个对象类,Session和Speaker,具有多对多关联。当我想将演讲者添加到会话中时,我使用以下代码:

109   $session->getSpeakers()->add($speaker);
110   $speaker->getSessions()->add($session);
这适用于现有会话。现在,当我实例化一个新会话,然后尝试以相同的方式添加演讲者时,会出现以下错误:

Fatal error:  Uncaught Error: Call to a member function add() on null in C:\###\api\sessions\update.php:109
Stack trace:
#0 {main}
  thrown in C:\###\api\sessions\update.php on line 109
我认为这是因为新会话还没有任何扬声器,因此在调用
getSpeakers()
时返回null

然而,我在条令文件中找不到任何关于如何规避这一点的内容。我在什么地方漏了一步吗?

你在构造器里吗

// missing parts skipped for brevity
public function __construct(...)
{
    // ...
    $this->speakers = new ArrayCollection();
    $this->sessions = new ArrayCollection();
}
不管怎样,您的代码在性能方面质量很差。您应该调用以下方法:

addSpeaker(Speaker $speaker)
addSession(Session $session)
因此,只有对象本身知道如何处理集合。目前,您将其内部详细信息泄漏到类之外,这是不好的(,违例),因为它会降低代码的可维护性。

您在构造函数中吗

// missing parts skipped for brevity
public function __construct(...)
{
    // ...
    $this->speakers = new ArrayCollection();
    $this->sessions = new ArrayCollection();
}
不管怎样,您的代码在性能方面质量很差。您应该调用以下方法:

addSpeaker(Speaker $speaker)
addSession(Session $session)

因此,只有对象本身知道如何处理集合。目前,您将其内部详细信息泄漏到类外,这是不好的(,违反),因为这会降低代码的可维护性。

您是否也初始化了
$speakers
?这里没有魔法……我完全没有忘记这一点。完全没有D谢谢迈克,现在一切都好了!很高兴听到,如果合适,请将我的答案标记为解决方案。您是否也初始化了
$speakers
?这里没有魔法……我完全没有忘记这一点。完全没有D谢谢迈克,现在一切都好了!很高兴听到,如果合适,请将我的答案标记为解决方案。