我正在与Symfony和Doctrine合作。
通过控制台命令Array
(
[0] => WEEK 47
[1] => WEEK 48
[2] => WEEK 49
[3] => WEEK 50
[4] => WEEK 51
)
创建架构时,它不会创建我想要的关系。
两个课程:
候选人 ORM实体类:
php bin/console doctrine:schema:update --force
投票 ORM实体类:
namespace AppBundle\Libraries\Data;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="candidates")
*/
class Candidates
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
* @ORM\OneToMany(targetEntity="AppBundle\Libraries\Data\Votes", mappedBy="nCandidate")
*/
private $nID;
/**
* Get nID
*
* @return integer
*/
public function getNID()
{
return $this->nID;
}
}
config.yml 中的doctrine配置部分如下所示:
namespace AppBundle\Libraries\Data;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="votes")
*/
class Votes
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $nID;
/**
* @ORM\Column(type="integer")
* @ORM\ManyToOne(targetEntity="AppBundle\Libraries\Data\Candidates", inversedBy="nID")
*/
private $nCandidate;
/**
* Get nID
*
* @return integer
*/
public function getNID()
{
return $this->nID;
}
/**
* Set nCandidate
*
* @param integer $nCandidate
*
* @return Votes
*/
public function setNCandidate($nCandidate)
{
$this->nCandidate = $nCandidate;
return $this;
}
/**
* Get nCandidate
*
* @return integer
*/
public function getNCandidate()
{
return $this->nCandidate;
}
}
应该创建的关系在PHPMyadmin或MySQL Workbench中不可见。
答案 0 :(得分:1)
即使您已将这些实体放置在Symfony所期望的非标准目录中,您也可以通过设置自定义映射来正确配置Doctrine ORM ..
问题似乎是由于投票实体中缺少主键。
每个实体必须有一个标识符/主键。
投票* @ORM\Id
的appbundle \库\数据\投票
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @return mixed
*/
public function getId()
{
return $this->id;
}
/**
* @param mixed $id
*/
public function setId($id)
{
$this->id = $id;
}
编辑: 这是我运行时获得的SQL(MySQL)
php app/console doctrine:schema:update --dump-sql
CREATE TABLE candidates (
n_id INT AUTO_INCREMENT NOT NULL
,PRIMARY KEY (n_id)
) DEFAULT CHAR
SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
CREATE TABLE votes (
id INT AUTO_INCREMENT NOT NULL
,n_candidate INT NOT NULL
,PRIMARY KEY (id)
) DEFAULT CHAR
SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
答案 1 :(得分:0)
尝试以下方法:
候选实体
namespace AppBundle\Libraries\Data;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="candidates")
*/
class Candidates
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $nID;
/**
* @ORM\OneToMany(targetEntity="AppBundle\Libraries\Data\Votes", mappedBy="candidate")
*/
private $vote;
/**
* Get nID
*
* @return integer
*/
public function getNID()
{
return $this->nID;
}
}
投票实体
namespace AppBundle\Libraries\Data;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="votes")
*/
class Votes
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $nID;
/**
* @ORM\Column(type="integer")
*/
private $nCandidate;
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Libraries\Data\Candidates", inversedBy="vote")
*/
private $candidate;
/**
* Get nID
*
* @return integer
*/
public function getNID()
{
return $this->nID;
}
/**
* Set nCandidate
*
* @param integer $nCandidate
*
* @return Votes
*/
public function setNCandidate($nCandidate)
{
$this->nCandidate = $nCandidate;
return $this;
}
/**
* Get nCandidate
*
* @return integer
*/
public function getNCandidate()
{
return $this->nCandidate;
}
}
然后运行php bin/console doctrine:schema:update --dump-sql
以查看教义是否知道关系
答案 2 :(得分:0)
每个表的ID列的属性名称为$nID
,但必须为$id
。
我还删除了与@ORM\Column(type="integer")
主键@ORM\ManyToOne(targetEntity="Class", inversedBy="ID")
关系的每个媒体资源上方的ID
条评论。