Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: Symfony
Войти
Регистрация
Восстановить пароль
 
yy401
14 / 14 / 6
Регистрация: 07.07.2011
Сообщений: 54
1

Форма и связанные таблицы

04.05.2018, 01:22. Просмотров 140. Ответов 2
Метки нет (Все метки)

У меня есть две таблицы с вопросами и ответами, связанные между собой:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// App\Entity\Question;
 
/**
 * @ORM\Entity(repositoryClass="App\Repository\QuestionRepository")
 */
class Question
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;
 
    /**
     * @var string
     * @ORM\Column(type="text")
     */
    private $text;
 
    /**
     * @var ArrayCollection
     * @ORM\OneToMany(targetEntity="App\Entity\Answer", mappedBy="question")
     */
    private $answerArray;
 
    /**
     * @ORM\OneToOne(targetEntity="App\Entity\Answer", mappedBy="id")
     * @ORM\JoinColumn(nullable=true)
     */
    private $correctAnswer;
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// App\Entity\Answer;
 
/**
 * @ORM\Entity(repositoryClass="App\Repository\AnswerRepository")
 */
class Answer
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;
 
    /**
     * @var string
     * @ORM\Column(type="text")
     */
    private $text;
 
    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Question", inversedBy="answerArray")
     * @ORM\JoinColumn(nullable=false)
     */
    private $question;
Суть в том, что для одного вопроса есть несколько вариантов ответа, один из которых правильный.

Форма:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// App\Form\QuestionType ;
 
class QuestionType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('text')
            ->add('correctAnswer')
        ;
    }
 
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Question::class,
        ]);
    }
}
Контроллер:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 // App\Controller\QuestionController
 
class QuestionController extends Controller
{
    /**
     * @Route("/{id}/edit", name="question_edit", methods="GET|POST")
     */
    public function edit(Request $request, Question $question): Response
    {
        $form = $this->createForm(QuestionType::class, $question);
        $form->handleRequest($request);
 
        if ($form->isSubmitted() && $form->isValid()) {
            // ...
        }
 
        return $this->render('question/edit.html.twig', [
            'question' => $question,
            'form' => $form->createView(),
        ]);
    }
Это админка, в которой администратор может указать какой из ответов на вопрос является правильным.

У меня есть две проблемы:
1. В выпадающем списке correctAnswer выводятся абсолютно все ответы, какие есть в базе. А должны выводиться только те, у которых question соответствует вопросу, который в данный момент редактируется.
2. Профилировщик выдает ошибку: The mappings App\Entity\Question#correctAnswer and App\Entity\Answer#question are inconsistent with each other.

У меня есть подозрение, что обе проблемы должны решаться правильными аннотациями в сущностях, но не могу сообразить как их правильно приготовить.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2018, 01:22
Ответы с готовыми решениями:

Doctrine 2 и связанные сущности
Как реализовать связь, при которой в качестве внешнего ключа выступает id ...

Связанные сущности Doctrine2
Здравствуйте, у меня был и есть интернет магазин на KO3 Сейчас я портирую его...

как получить связанные данных через relations и отобразить их через CActiveDataProvider?
Добрый день Уважаемые программисты! Суть вопроса: Имеется 3 таблицы, 2 из них...

Связанные списки и форма.
Добрый день! В форме ПутевойЛист при выборе Вида техники появляется Марка,...

Связанные таблицы
Есть последовательно связанные таблицы: Таблица1 (id, idTable2), Таблица2 (id,...

2
Borsche
166 / 95 / 41
Регистрация: 03.07.2016
Сообщений: 424
04.05.2018, 08:39 2
Цитата Сообщение от yy401 Посмотреть сообщение
* @ORM\OneToOne(targetEntity="App\Entity\Answer", mappedBy="id")
* * ** @ORM\JoinColumn(nullable=true)
Уберите mappedBy, и исправте @JoinColumn(name="correct_answer_id", referencedColumnName="id"). Это по второму вопросу.
По первому, что логика у вас покошеная(это как по мне). Ну не суть. Вам нужно в форме нормально поля настроить чтобы показывало только то что нужно. Вот вам доки https://symfony.com/doc/3.4/reference/forms/types/entity.html ройте в сторону query_builder.
1
yy401
14 / 14 / 6
Регистрация: 07.07.2011
Сообщений: 54
04.05.2018, 09:28  [ТС] 3
Borsche, благодарю! Обе проблемы решены.

По первому вопросу сделал так:
PHP
1
2
3
4
5
6
7
$builder
    ->add('text')
    ->add('correctAnswer', EntityType::class, [
        'class' => "App:Answer",
        'choices' => $builder->getData()->getAnswerArray()
    ])
;
Теперь выводится только то, что нужно.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2018, 09:28

Связанные таблицы
Мне приходят несколько файлов csv/ xlsx. Каждый файл - будущая таблица в бд....

Связанные таблицы
Существует две таблицы группы и профессии, соответственно в профессии много...

Связанные таблицы
Сделал связанные таблицы все работает но когда выходишь из программы он выдает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru