我有一个具有多极关系和模型的Symfony应用程序,到目前为止运行良好。我有一个应用程序模型,具有按照这样定义的源关系
/**
* @MaxDepth(2)
* @ManyToOne(targetEntity="SourceSystem", inversedBy="apps")
* @JoinColumn(name="sourceSystem_id", referencedColumnName="id")
*/
private $sourceSystem;
我现在尝试使用{{app.sourceSystem.name}}
在视图中列出源名称,该名称因Impossible to access an attribute ("name") on a null variable in appstore_adminlist_apps.html.twig at line 25.
而失败。
接下来,在我的控制器中,我尝试
/**
* @Route("/contentstore_admin/", name="appstore_list_apps")
* @Method({"GET"})
*/
public function listAppsAction()
{
$repository = $this->getDoctrine()->getRepository('AppBundle:App');
$apps = $repository->findAll();
/** @var App $app */
foreach ($apps as $app) {
dump($app->getSourceSystem()->getName());
}
// check if the user already has a trial license
return $this->render('appstore_admin/list_apps.html.twig', [
"apps" => $apps
]);
}
Call to a member function getName() on null
失败,但将系统名称打印到调试栏中。
我真的对这种行为感到困惑,并且想让它起作用。
因为 $app->getSourceSystem()
can 返回 null
值,您需要在使用它之前对其进行检查。
$sourceSystem = $app->getSourceSystem();
if ($sourceSystem) {
$name = $sourceSystem->getName();
}
或
{% if app.sourceSystem %}
{{app.sourceSystem.name}}
{% endif %}
如果您不需要 $sourceSystem
是无效的,则可以更改nullable
属性。
@JoinColumn(name="sourceSystem_id", referencedColumnName="id", nullable=false)