ManyToOne / OneToMany 自定义连接列

ManyToOne / OneToMany with custom join column

我正在使用现有数据库,其中的字段关联性不是很好。我已经能够让其他 ManyToOne 和反之亦然的关系工作(我在处理项目时创建数据库的关系),但是这个预先存在的数据库让我陷入困境。

我有一个名为 franchisee_creds、ManyToOne 的 table,其中一个字段 franchisee_id 需要映射到另一个名为 accounts、OneToMany 的 table,带有一个名为 franchisee_number 的字段,一个字符串。

FranchiseeCreds.php:

 /**
 * @ORM\ManyToOne(
 *     targetEntity="Inertia\InertiaBundle\Entity\Accounts",
 *     inversedBy="franchiseeCreds",
 *     fetch="EAGER"
 * )
 * @ORM\JoinColumn(name="franchisee_id", referencedColumnName="franchisee_number")
 */
private $accounts;

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

...

 /**
 * @return ArrayCollection
 */
public function getAccounts()
{
    return $this->accounts;
}

Accounts.php

 /**
 * @ORM\OneToMany(targetEntity="Inertia\InertiaBundle\Entity\FranchiseeCreds", mappedBy="accounts")
 */
private $franchiseeCreds;

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

...

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

控制器:

  public function showAction($id)
{
    $em = $this->getDoctrine()->getManager('inertia');

    $entity = $em->getRepository('InertiaBundle:Accounts')->find($id);

    if (!$entity) {
        throw $this->createNotFoundException('Unable to find Accounts entity.');
    }

    $deleteForm = $this->createDeleteForm($id);

    return $this->render('InertiaBundle:Accounts:show.html.twig', array(
        'entity'      => $entity,
        'delete_form' => $deleteForm->createView(),
    ));
}

然后在我看来,如果我将 {{ dump(entities) }} 放在 Accounts 和 FranchiseeCreds show.html.twig 上,关系就会显示出来,但它始终是 null

我遇到的最大问题是当我 运行:

php app/console doctrine:schema:update --force

我做了备份,运行解决了有问题的表,重新运行 doctrine:schema:update 命令,恢复了数据,一切正常。

我也有一种误解,认为当我在代码中放入 {{ dump(entity) }} 时,我将能够看到一系列相关项目。我错了。当我真正开始工作时 运行 一个 for 循环并打印出数据,在我修复数据库后它工作正常。