我是Synfony2和教义用法的新手。我创建了两个相关的调查实体。 应用\实体\问题:
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\QuestionRepository")
*/
class Question
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Options", inversedBy="questions")
*/
private $options;
public function __construct()
{
$this->options = new ArrayCollection();
}
}
App \ Entity \ Options :
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\OptionsRepository")
*/
class Options
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Question", mappedBy="options")
*/
private $questions;
public function __construct()
{
$this->answers = new ArrayCollection();
$this->questions = new ArrayCollection();
}
}
它将创建一个新表:question_options
。现在,我的MYSQL模型如下所示:
现在,我需要通过question_options
将answer
表附加到answer.question_options_id
表。我该如何使用教义做到这一点?由于缺少question_options
实体,我感到困惑。我发现多对多连接不是实体。
答案 0 :(得分:1)
最好的方法是附加Option
来回答,因为question_options
表只是一个元数据,并且池中的用户实际上会选择一个选项。从某种意义上说,用户在回答时不要选择question_option,而是要选择特定的选项。答案会给问题选项作为FK,这看起来很奇怪。
或通过手动创建QuestionOption实体类手动创建多对多,使用OneToMany,ManyToOne和Question和Option进行联接
这是一个更好的选择,可以使其更开放地关闭以进行修改,因为您可以根据需要添加更多描述答案的字段,例如回答时间,更改次数等。
我还建议为具有FK的表/实体添加用户后缀,因为它现在混淆了用户的答案以及只是池的一般结构。