Как сделать комбинацию из двух столбцов уникальной в Symfony 4 с помощью Doctrine? - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть таблица с именем '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

Я пробовал это в моем файле сущности, но он не работает.

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

Пожалуйста, как реализовать это с помощью ORM в Symfony 4.

У меня есть ссылка, которая делает то же самое, но в Mysql. Я хочу решение для Symfony ORM. введите описание ссылки здесь

Ошибка:

[Семантическая ошибка] Аннотация "@Table" в классе Webkul \ CampusConnect \ En tity \ StudentAssignment никогда не импортировался. Возможно, вы забыли добавить для этого заявление "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;

1 Ответ

0 голосов
/ 23 апреля 2019

Вы редактировали, но вы не использовали ORM в качестве импортированного псевдонима, это был номер 1 (см. Комментарии).

Тогда вы пропустили добавление ORM к внутренней конфигурации, например, @ORM\UniqueConstraint вместо @UniqueConstraint. Кроме того, конфигурация UniqueConstraint требует использования столбца имен, а не свойства .

Вы не указали обе стороны отношения 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;

    // ...
}
...