Laravel поле модели с типом динамики c - PullRequest
1 голос
/ 18 июня 2020

В моем проекте Laravel я создаю способ динамически создавать вопросы, на которые пользователи моей платформы должны отвечать. Для этого у меня есть две модели:

Одна модель для вопросов, содержащая одно поле (строку) для самого вопроса и одно поле для типа вопроса (свободный текст, раскрывающийся список, флажок и т. Д. c ).

А еще у меня есть одна модель для ответов пользователей. Мой вопрос в том, в каком формате я буду использовать ответы, поскольку это разный тип в зависимости от вопроса. Мой первоначальный план - сделать его строкой, а затем, если это вопрос с флажком (логический), я должен сохранить его как «истина» или «ложь», если это раскрывающийся список, я сохраню индекс ответа как «1», «2» и т. Д. c. Это сработает, но это не кажется изящным решением. Есть ли лучшие способы сделать это? Что мне действительно нужно, так это какое-то поле с типом Dynami c ...

1 Ответ

1 голос
/ 18 июня 2020

Если вы хотите упростить, eloquent accessor может решить большинство проблем. Представьте, что в вашем ответе есть вопрос, связанный с этим, что-то вроде этого могло бы решить вашу проблему набора Dynami c.

class Answer {
    public function getValueAttribute() {
        if ($this->question->type === 'boolean') {
            // save bool as 1 or 0, way easier imo
            return (bool) $this->answer;
        }

        if ($this->question->type === 'dropdown') {
            // asuming you can get the options
            return $this->answer->getOptions()[(int) $this->answer];
        }
    }
}

Это очень расплывчатое или псевдо-подобное решение, но я надеюсь, что оно поможет вам правильный путь. Теперь вы можете получить тип Dynami c с помощью.

$answer->value;
...