如何使用Doctrine在Symfony 4中使两列的组合独一无二?

Sau*_*abh 2 php doctrine symfony doctrine-orm

我有一个名为“student_assignment”的表,其中有多个列,我在下面显示了其中的 2 个:

这两个列也是外键。

StudentId   assignmentId
    10           7           -> allowed
    10           8           -> allowed
    11           7           -> allowed
    11           7           -> not allowed, the combination of 11 7 already exists in table
Run Code Online (Sandbox Code Playgroud)

我已经在我的实体文件中尝试过这个,但它不起作用。

/**
 * Webkul\CampusConnect\Entity\StudentAssignment
 *
 * @Table(name="student_assignment", 
 *    uniqueConstraints={
 *        @UniqueConstraint(name="assignment_unique", 
 *            columns={"student", "assignment"})
 *    }
 * )
 * @Entity
 */
Run Code Online (Sandbox Code Playgroud)

请教如何在 symfony 4 中使用 ORM 来实现这一点。

我有一个同样的链接,但在 Mysql 中。我想要 Symfony ORM 的解决方案。 在此处输入链接描述

错误:

[语义错误] Webkul\CampusConnect\Entity\StudentAssignment 类中的注释“@Table”从未被导入。您是否忘记为此注释添加“u se”语句?

实体:

namespace Webkul\CampusConnect\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\Table;

/**
 * Webkul\CampusConnect\Entity\StudentAssignment
 *
 * @ORM\Table(name="student_assignment", 
 *    uniqueConstraints={
 *        @UniqueConstraint(name="assignment_unique", 
 *            columns={"student", "assignment"})
 *    }
 * )
 * @Entity
 */
class StudentAssignment
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="Webkul\CampusConnect\Entity\Student", inversedBy="studentAssignments")
     * @ORM\JoinColumn(onDelete="CASCADE")
     */
    private $student;
Run Code Online (Sandbox Code Playgroud)

rke*_*eet 6

您已编辑,但没有ORM用作导入的别名,即编号 1(请参阅评论)。

然后你错过了添加ORM到内部配置,例如@ORM\UniqueConstraint而不是@UniqueConstraint. 此外, UniqueConstraint 的配置需要使用名,而不是property

您还没有提供连接表'esque OtM - MtO 关系的双方,但我假设它存在。你应该有:

namespace Webkul\CampusConnect\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(
 *    name="student_assignment", 
 *    uniqueConstraints={
 *        @ORM\UniqueConstraint(name="assignment_unique", columns={"student_id", "assignment_id"})
 *    }
 * )
 * @Entity
 */
class StudentAssignment
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(name="id", type="integer")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="Webkul\CampusConnect\Entity\Student", inversedBy="studentAssignments")
     * @ORM\JoinColumn(name="student_id", onDelete="CASCADE")
     */
    private $student;

    /**
     * @ORM\ManyToOne(targetEntity="Webkul\CampusConnect\Entity\Assignment", inversedBy="studentAssignments")
     * @ORM\JoinColumn(name="assignment_id", onDelete="CASCADE")
     */
    private $assignment;

    // ...
}
Run Code Online (Sandbox Code Playgroud)