Как сделать комбинацию двух столбцов уникальной в Symfony 4 с помощью Doctrine?

У меня есть таблица с именем «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. введите сюда описание ссылки

Ошибка:

[Semantical Error] The annotation "@Table" in class Webkul\CampusConnect\En tity\StudentAssignment was never imported. Did you maybe forget to add a "u se" statement for this annotation?

Сущность:

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;

Вы обновили свою базу данных после реализации этого? или попробуй очистить кеш

habibun 23.04.2019 10:37

@habibun: вышеизложенное дает мне ошибку. Я обновил вопрос с ошибкой. Пожалуйста, проверьте.

Saurabh 23.04.2019 10:52

пожалуйста, поставьте после пространства имен, use Doctrine\ORM\Mapping\Table;

habibun 23.04.2019 10:55

@habibun: я использовал его. Я обновил свой вопрос. Пожалуйста, проверьте.

Saurabh 23.04.2019 10:57

очисти кеш попробуй еще раз

habibun 23.04.2019 10:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
5
3 498
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы отредактировали, но не использовали 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;

    // ...
}

Другие вопросы по теме