【问题标题】:Empty object variable and empty ArrayCollection onetomany symfony空对象变量和空 ArrayCollection onetomany symfony
【发布时间】:2016-09-26 23:44:46
【问题描述】:

我上了三门课:

  • 项目类型
  • 阶段
  • ProjectTypePhase(这是为了创建一个单独的连接表,以确保 ProjectType 和 Phase 与订购的 id 链接)

项目类型

    /**
     * @OneToMany(targetEntity="ProjectTypePhase", mappedBy="project_type")
     */
    private $projectTypePhases;

    public function __construct()
    {
        $this->projectTypePhases = new ArrayCollection();
    }

   /**
    * @return mixed
    */
   public function getProjectTypePhases()
   {
       return $this->projectTypePhases;
   }

阶段

/**
 * @OneToMany(targetEntity="ProjectTypePhase", mappedBy="phase")
 */
private $projectTypePhases;

public function __construct()
{
    $this->projectTypePhases = new ArrayCollection();
}

 /**
 * @return mixed
 */
public function getProjectTypePhases()
{
    return $this->projectTypePhases;
}

ProjectTypePhase

/**
 * @ManyToOne(targetEntity="ProjectType", inversedBy="project_type_phase")
 * @JoinColumn(name="project_type_id", referencedColumnName="id")
 */
private $projectType;
/**
 * @ManyToOne(targetEntity="Phase", inversedBy="project_type_phase")
 * @JoinColumn(name="phase_id", referencedColumnName="id")
 */
private $phase;

public function __construct($projectType, $phase)
{
    $this->projectType = $projectType;
    $this->phase = $phase;
}

我通过 MySQL 工作台填充了数据库,因为它们只是 id 条目(对吗?)。无论如何,每当我尝试执行 $projectType->getProjectTypePhases();` 时,它都会返回一个空集合。当我尝试这个时:

$repository = $this->getDoctrine()->getRepository('AppBundle:ProjectTypePhase');
$projectPhases = $repository->findAll();

我得到了所有条目,但不知何故,项目类型和阶段实体实例的变量名称为空,即使它们已填充到数据库中。对应的键名是正确的,名字是填的。出了什么问题?是否有一些方法需要完成我所缺少的?我想要完成的事情是:

我有一个多对多关系,它在 ProjectType 和 Phase 之间运行良好。但是,由于该表没有 id,因此事情并没有按照我想要的顺序进行。我已经搜索了一个解决方案,这是一个单独的实体,可以处理 ProjectType 和 Phase 之间的关系并添加额外的列。这是正确的方法吗?

【问题讨论】:

  • 您在ProjectTypePhase inversedBy 中有错字还是正确?
  • 应该是正确的:@ORM\Table(name="project_type_phase")

标签: database symfony doctrine one-to-many


【解决方案1】:

修改ProjectTypePhase如下

/**
 * @ManyToOne(targetEntity="ProjectType", inversedBy="projectTypePhases")
 * @JoinColumn(name="project_type_id", referencedColumnName="id")
 */
private $project_type;
/**
 * @ManyToOne(targetEntity="Phase", inversedBy="projectTypePhases")
 * @JoinColumn(name="phase_id", referencedColumnName="id")
 */
private $phase;

您必须使名称匹配才能使事情正常进行。然而,教义没有警告你,这很奇怪

【讨论】:

  • 我仍然得到空名称。我什至可以通过 ProjectType 对象找到。所以这一切都适用于你的例子和我的例子。只是属性“名称”在 ProjectType 和 Phase 上都是 null,即使它们已填充到数据库中
  • 当我做 $repository->findAll($projectType);现在 $projectType 是一个对象,它确实给了我项目类型的名称,但是阶段名称仍然为空
  • @DaViDa 也许你在别处有错别字
  • 我在模板中做了 {{ phase.getPhase().getName() }} 并确实找到了名称,我认为答案与这个问题的答案有关:@987654321 @ 。但是我仍然想知道为什么 ArrayCollections 保持为空以及为什么会发生这种情况
猜你喜欢
  • 2018-04-21
  • 2014-11-08
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 2013-12-28
相关资源
最近更新 更多