Php 检查用户是否已提交条令-Symfony 3

Php 检查用户是否已提交条令-Symfony 3,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我有3个实体,分别是用户、问题和提交。我试图限制一个用户在已经解决同一个问题的情况下多次解决同一个问题。我在User实体中通过检查每个用户的Submissions创建了一个方法。但是,我无法找到匹配问题id和用户id字段的方法,以便查看提交是否正确 这里是实体; Problem.php class Problem { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */

我有3个实体,分别是
用户
问题
提交
。我试图限制一个用户在已经解决同一个问题的情况下多次解决同一个问题。我在
User
实体中通过检查每个用户的
Submissions
创建了一个方法。但是,我无法找到匹配问题id和用户id字段的方法,以便查看提交是否正确

这里是实体; Problem.php

class Problem
{
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\Column(type="string", length=255, unique=True)
 * @Assert\NotBlank(message="Please enter a valid title")
 */
protected $title;

/**
 * @ORM\Column(type="text")
 * @Assert\NotBlank(message="Please enter a valid description")
 */
protected $description;

/**
 * @ORM\Column(type="string")
 * @Assert\NotBlank(message="Please enter a valid value")
 */
protected $points;

/**
 * @ORM\Column(type="string")
 * @Assert\NotBlank(message="Please enter a valid flag")
 */
protected $flag;

/**
 * @ORM\Column(type="string")
 * @Assert\NotBlank(message="Please enter a valid value")
 */
protected $category;

/**
 * @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="problems")
 * @ORM\JoinColumn(name="createdby", referencedColumnName="id")
 */
protected $createdby;

/**
 * @ORM\OneToMany(targetEntity="AppBundle\Entity\Submission", mappedBy="problem_id")
 */
protected $submissions;

/**
 * @Gedmo\Slug(fields={"title"})
 * @ORM\Column(type="string", length=255, unique=false,)
 */
protected $slug;

/**
 * @ORM\Column(type="datetime")
 */
private $createdAt;

/**
 * @ORM\Column(type="datetime")
 */
private $updatedAt;

/**
 * @ORM\OneToMany(targetEntity="AppBundle\Entity\Discussion", mappedBy="problem")
 */
private $discussions;


/**
 * @ORM\Column(type="boolean")
 */
protected $isPublished = True;
}
Submission.php

class Submission
{

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

    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Problem", inversedBy="submissions")
     * @ORM\JoinColumn(name="problem_id", referencedColumnName="id",  onDelete="CASCADE")
     */
    protected $problem_id;

    /**
     * @ORM\Column(type="boolean")
     */
    protected $correct = false;

    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="submissions")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    protected $user_id;

    /**
     * @ORM\Column(type="string")
     * @Assert\NotBlank(message="Flag cannot be blank")
     */
    protected $submission_flag;

    /**
     * @ORM\Column(type="datetime")
     */
    private $createdAt;

    /**
     * @ORM\Column(type="datetime")
     */
    private $updatedAt;
}
User.php 类用户实现用户接口 {


您可以在提交实体上尝试@UniqueConstraint。例如:

/**
 * @Entity
 * @Table(uniqueConstraints={@UniqueConstraint(name="unique_user_submission", columns={"name", "email"})})
 */
class Submission
{
}
我认为这将使这两个字段成为一个复合的唯一字段


这样,即使提交错误,用户也只能提交一次。在我的情况下,我希望用户仅在提交正确的情况下提交一次。如果提交错误,用户可以多次提交,直到他们正确提交。在这种情况下,您希望在控制器中执行该检查。您需要检查实体是否存在错误不管逻辑是什么,然后对它执行更新并持久化/刷新它。我尽量避免实体中的逻辑。
/**
 * @Entity
 * @Table(uniqueConstraints={@UniqueConstraint(name="unique_user_submission", columns={"name", "email"})})
 */
class Submission
{
}