我刚刚在Symfony 2中启动了面向对象的编程,我在加入mysql表时遇到了问题。
我有两张桌子:
kommuner : ID,名称,容量
活动: ID,名称kommune_id
如何在实体文件中加入这些表?
这是我在DefaultController中的函数:
public function aktiviteterAction()
{
$em = $this->get('doctrine.orm.default_entity_manager');
$aktiviteter = $em->getRepository(Aktiviteter::class)->findAll();
return $this->render('default/aktiviteter.html.twig', [
'aktiviteter' => $aktiviteter,
]);
}
这是我的实体,Kommune.php:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Kommune
*/
class Kommune
{
/**
* @var integer
*/
private $id;
/**
* @var string
*/
private $name;
/**
* @var integer
*/
private $capacity;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
* @return Kommune
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set capacity
*
* @param integer $capacity
* @return Kommune
*/
public function setCapacity($capacity)
{
$this->capacity = $capacity;
return $this;
}
/**
* Get capacity
*
* @return integer
*/
public function getCapacity()
{
return $this->capacity;
}
}
这是我的Aktiviteter.php实体:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Aktiviteter
*/
class Aktiviteter
{
/**
* @var integer
*/
private $id;
/**
* @var string
*/
private $name;
/**
* @var integer
*/
private $kommuneId;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
* @return Aktiviteter
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set kommuneId
*
* @param integer $kommuneId
* @return Aktiviteter
*/
public function setKommuneId($kommuneId)
{
$this->kommuneId = $kommuneId;
return $this;
}
/**
* Get kommuneId
*
* @return integer
*/
public function getKommuneId()
{
return $this->kommuneId;
}
/**
* @ManyToOne(targetEntity="Kommune")
* @JoinColumn(name="kommune_id", referencedColumnName="id")
**/
private $kommune;
}
有人可以解释一下这些表如何在Symfony 2中运行吗?我感谢各种帮助!
答案 0 :(得分:1)
您必须根据这些实体之间的关系选择正确的Doctrine Association Mapping。
其他有助于您阅读的参考资料:
更新:
OneToMany - ManyToOne关系可能是Unidirectional:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Aktiviteter
*/
class Aktiviteter
{
/**
* @var integer
*/
private $id;
/**
* @var string
*/
private $name;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
* @return Aktiviteter
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* @ManyToMany(targetEntity="Kommune")
* @JoinTable(name="kommunes")
**/
private $kommunes;
}
喜欢 @Isa Bek 回答
注意:When mapping bidirectional associations it is important to understand the concept of the owning and inverse sides并且记住您不需要设置关系的实体ID,因为Doctrine会自动处理,因为您将在使用命令应用映射后看到:来自您的控制台的$ php app/console doctrine:schema:update --force
。
答案 1 :(得分:0)
我想,你想在 Kommune 和 Aktiviteler 实体之间使用一对多的关系。 在Kommune.php实体中:
/**
* Kommune
*
* @ORM\Table()
* @ORM\Entity
*/
class Kommune
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="Aktiviteter", mappedBy="kommune")
*/
private $aktiviteler;
/**
* Other fields
*/
}
在Aktiviteter.php实体中
/**
* Aktiviteter
*
* @ORM\Table()
* @ORM\Entity
*/
class Aktiviteter
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Kommune", inversedBy="aktiviteler")
* @ORM\JoinColumn(name="kommune_id", referencedColumnName="id")
*/
private $kommune;
/**
* Other fields
*/
}
我认为,这些代码对您有用。