Php 原则2添加新关联时出现致命错误
我有两个对象类,Session和Speaker,具有多对多关联。当我想将演讲者添加到会话中时,我使用以下代码: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
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谢谢迈克,现在一切都好了!很高兴听到,如果合适,请将我的答案标记为解决方案。