无法在Symfony2上创建关联

时间:2015-11-14 22:22:08

标签: php symfony doctrine-orm

我正在尝试在我的项目中创建“OneToMany”双向关联,但是当我执行“doctrine:schema:update”时,没有任何反应。

如果我直接从Sequel Pro创建此关联并运行update schema命令,则会更改dissapear ...:/

关系是: - 来自Customers表的一个“id”,其中包含许多“customer_id”形式的控制表。

以下是客户代码:

<?php

namespace Ourentec\CustomersBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

/**
 * Customers
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Customers
{
 /* @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="name", type="string", length=100)
 */
private $name;

/**
 * @var string
 *
 * @ORM\Column(name="lastname", type="string", length=100)
 */
private $lastname;

/**
 * @var string
 *
 * @ORM\Column(name="address", type="text")
 */
private $address;

/**
 * @var string
 *
 * @ORM\Column(name="phone", type="string", length=100)
 */
private $phone;

/**
 * @var string
 *
 * @ORM\Column(name="pass", type="string", length=100)
 */
private $pass;

/**
 * @var string
 *
 * @ORM\Column(name="tasks", type="text")
 */
private $tasks;

/**
 * @var string
 *
 * @ORM\Column(name="status", type="string", length=100)
 */
private $status;

/**
 * @var string
 *
 * @ORM\Column(name="email", type="string", length=100)
 */
private $email;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="date", type="datetime")
 */
private $date;

/**
 * @var string
 *
 * @ORM\Column(name="location", type="string", length=100)
 */
private $location;



/**
 * @ORM\OneToMany(targetEntity="Control", mappedBy="customers")
 */
private $customer_id;

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

控制代码:

<?php

namespace Ourentec\CustomersBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Control
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Control
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var integer
     *
     * @ORM\Column(name="customer_id", type="integer")
     *
     * @ORM\ManyToOne(targetEntity="Customers", inversedBy="control")
     * @ORM\JoinColumn(name="customer_id", referencedColumnName="id")
     */
    private $customerId;

    /**
     * @var integer
     *
     * @ORM\Column(name="user_id", type="integer")
     */
    private $userId;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="date", type="datetime")
     */
    private $date;

    /**
     * @var integer
     *
     * @ORM\Column(name="seen", type="smallint")
     */
    private $seen;

我遵循了这2个网站的文档 http://symfony.com/doc/current/book/doctrine.html http://librosweb.es/libro/symfony_2_x/capitulo_8/relaciones_y_asociaciones_de_entidades.html

但我不知道为什么它不起作用..

任何想法都将受到赞赏:)

1 个答案:

答案 0 :(得分:3)

映射不正确,我将尝试解释它是如何工作的。

在客户实体(您应该将其重命名为客户,名称是单数)

#categories-panels {
  margin: auto auto;
  height: 1300px;
}

#categories-panels .recipe-letter {
  display: inline-block;
  word-wrap: break-word;
  margin: 2px 0px;
  padding: 2px;
  height: 200px;
  width: 200px;
  border: 1px solid black;
}

#categories .recipe-alphabetically  {
  padding: 0px;
  line-height: 0px;
}

#categories-panels .recipe-letter li {
  font-size: 13px;
  padding: 0px;
  text-indent: 0px;
  word-wrap: break-word;
}

#categories-panels img {
  width: 100px;
}

Mapped by选项定义另一个实体中的字段名称。

/**
 * @ORM\OneToMany(targetEntity="Control", mappedBy="customer")
 */
private $controls;

与inversedBy相同。

在Customers实体中,您还需要初始化控件var作为ArrayCollection:

/**
 * @var integer
 *
 * @ORM\Column(name="customer_id", type="integer")
 *
 * @ORM\ManyToOne(targetEntity="Customers", inversedBy="controls")
 * @ORM\JoinColumn(name="customer_id", referencedColumnName="id")
 */
private $customer;

使用这些映射架构应该正确更新。

有关详情,请查看doctrine docs