我正在尝试在我的项目中创建“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
但我不知道为什么它不起作用..
任何想法都将受到赞赏:)
答案 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。