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 循环并打印出数据,在我修复数据库后它工作正常。
我正在使用现有数据库,其中的字段关联性不是很好。我已经能够让其他 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 循环并打印出数据,在我修复数据库后它工作正常。