主义:多对多

时间:2019-07-01 17:21:24

标签: symfony doctrine-orm

我是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模型如下所示: model 现在,我需要通过question_optionsanswer表附加到answer.question_options_id表。我该如何使用教义做到这一点?由于缺少question_options实体,我感到困惑。我发现多对多连接不是实体。

1 个答案:

答案 0 :(得分:1)

最好的方法是附加Option来回答,因为question_options表只是一个元数据,并且池中的用户实际上会选择一个选项。从某种意义上说,用户在回答时不要选择question_option,而是要选择特定的选项。答案会给问题选项作为FK,这看起来很奇怪。

或通过手动创建QuestionOption实体类手动创建多对多,使用OneToMany,ManyToOne和Question和Option进行联接

这是一个更好的选择,可以使其更开放地关闭以进行修改,因为您可以根据需要添加更多描述答案的字段,例如回答时间,更改次数等。

我还建议为具有FK的表/实体添加用户后缀,因为它现在混淆了用户的答案以及只是池的一般结构。