在Symfony 2中加入表格

时间:2015-03-29 12:09:37

标签: php mysql symfony join

我刚刚在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中运行吗?我感谢各种帮助!

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;

}
  

Bidirectional

喜欢 @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
   */
 } 

我认为,这些代码对您有用。