Symfony 2 Doctrine将实体与相关实体保持一致

时间:2016-08-26 11:12:02

标签: php symfony doctrine-orm

我在尝试使用Symfony 2.7.11持有具有相关实体的新实体时遇到问题。

我需要创建一个可以拥有许多大学的Landing,因此我创建了3个表

  

降落

     
      
  • landingId(主键)
  •   
     

大学

     
      
  • universityId(主键)
  •   
     

landingUniversity

     
      
  • landingId(都是主键)(外键登陆)
  •   
  • universityId(外国重点大学)
  •   

我只有2个实体(登陆和大学)和多对多关系(单向,因为我只是想知道大学加入登陆,所以大学没有任何关于着陆的事情)

首先,我在我的数据库中找到每个大学并保存它们。然后我创建了新的Landing并添加了所有这些。

$universityRepository = $this->em->getRepository('University');
$universities = array();
foreach ($listUniversities as $universityId){
    $university= $cursosRepository->findById($universityId);
    $universities[] = $university[0];
}
$newLanding = new Landing();
$newLanding->setName($landing["name"]);
foreach ($universities as $university){
    $newLanding->addUniversity($university);
}
$em = $this->getEntityManager();
$em->persist($newLanding);
$em->flush(); 

当symfony执行flush()时,我收到此错误:

  

无法解析类大学“landingId”列的类型

我做错了什么?

我的实体:

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

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

    /**
     * @var integer
     *
     * @ORM\ManyToOne(targetEntity="Language")
     * @ORM\JoinColumn(name="languageId", referencedColumnName="languageId")
     */
    private $languageId;

    /**
     * @ORM\ManyToMany(targetEntity="University")
     * @ORM\JoinTable(name="landingUniversity",
     *      joinColumns={@ORM\JoinColumn(name="landingId", referencedColumnName="landingId")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="unversityId", referencedColumnName="unversityId")}
     *      )
     */
    private $universities;

非常感谢!!!

1 个答案:

答案 0 :(得分:0)

错误消息非常明确。你的错误在这里:

joinColumns={@ORM\JoinColumn(name="landingId", referencedColumnName="landingId")}

应该是

joinColumns={@ORM\JoinColumn(name="landingId", referencedColumnName="landingid")}

因为您的Landing实体不包含任何landingId数据库字段,而是包含landingid。

但您宁愿编辑$ id属性的列名:

/**
 * @var integer
 *
 * @ORM\Column(name="landingId", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;