我有两个表(测试和问题)和中间表(n-m)。在这一点上一切正常。 但是现在,我需要在(n-m)表中添加额外的信息,这个问题的顺序在这个测试中
我需要这个:
id | test_id | question_id | order
1 | 1 | 1 | 3
2 | 1 | 2 | 2
3 | 1 | 3 | 1
4 | 1 | 4 | 4
所有这些关系都与学说注释有关......
测试实体
/**
* @ORM\ManyToMany(targetEntity="Question", inversedBy="tests")
*/
private $questions;
问题实体
/**
* @ORM\ManyToMany(targetEntity="Test", mappedBy="questions"))
*/
private $tests;
任何帮助将不胜感激
修改
你好! 非常感谢@DonCallisto
我的实体在最后:
测试
/**
* @ORM\OneToMany(targetEntity="RTestQuestion", mappedBy="question")
*/
private $questions;
问题
/**
* @ORM\OneToMany(targetEntity="RTestQuestion", mappedBy="test"))
*/
private $tests;
我的新实体" RTestQuestion"
/**
* ET\BackendBundle\Entity\RTestQuestion
*
* @ORM\Table(name="rtest_question")
* @ORM\Entity
*/
class RTestQuestion {
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Question", inversedBy="questions", cascade={"persist", "remove"})
*/
private $question;
/**
* @ORM\ManyToOne(targetEntity="Test", inversedBy="tests", cascade={"persist", "remove"})
*/
private $test;
/**
* @var integer $order
*
* @ORM\Column(name="question_order", type="integer", nullable=true)
*/
private $question_order;
我必须做两处修改:
属性需要在持久化和删除操作上进行级联(如果没有此操作,则学说控制台显示错误)
" order"限制为mysql,现在成为一个问题订单。
再次感谢@DonCallisto!
答案 0 :(得分:3)
将关系拆分为1-n和m-1,如下所示
测试实体---(1 - m)---> RTestQuestion实体< ---(m - 1)---问题
所以你的代码将是
测试实体
/**
* @ORM\OneToMany(targetEntity="RTestQuestion", inversedBy="question")
*/
private $questions;
问题实体
/**
* @ORM\OneToMany(targetEntity="RTestQuestion", mappedBy="test"))
*/
private $tests;
RTestQuestion实体
/**
* @ORM\ManyToOne(targetEntity="Question", mappedBy="questions"))
*/
private $question;
/**
* @ORM\ManyToOne(targetEntity="Test", mappedBy="tests"))
*/
private $test;
/**
* EXTRA ATTRIBUTES HERE
*/
请记住,与额外字段的关联不再是一个关联,而是一个新实体!