Php 具有动态类型的Laravel模型场

Php 具有动态类型的Laravel模型场,php,laravel,laravel-7,Php,Laravel,Laravel 7,在我的Laravel项目中,我正在构建一种动态创建问题的方法,我的平台的用户应该回答这些问题。为此,我有两个模型: 一个问题模型,包含一个问题本身字段(字符串)和一个问题类型字段(自由文本、下拉列表、复选框等) 然后我有一个模型,用于用户给出的答案。我的问题是用什么格式来回答,因为根据问题的不同,答案的类型也不同。我最初的计划是把它变成一个字符串,然后如果它是一个复选框(布尔值)问题,我必须将它存储为“真”或“假”,如果它是一个下拉列表,我将答案的索引存储为“1”、“2”等。这会起作用,但感觉不

在我的Laravel项目中,我正在构建一种动态创建问题的方法,我的平台的用户应该回答这些问题。为此,我有两个模型:

一个问题模型,包含一个问题本身字段(字符串)和一个问题类型字段(自由文本、下拉列表、复选框等)


然后我有一个模型,用于用户给出的答案。我的问题是用什么格式来回答,因为根据问题的不同,答案的类型也不同。我最初的计划是把它变成一个字符串,然后如果它是一个复选框(布尔值)问题,我必须将它存储为“真”或“假”,如果它是一个下拉列表,我将答案的索引存储为“1”、“2”等。这会起作用,但感觉不是一个优雅的解决方案。有更好的方法吗?我真正想要的是一种动态类型的字段…

如果你想保持简单,一个有口才的访问器可以解决大多数问题。假设您的答案中有一个与之相关的问题,类似这样的问题可以解决您的动态键入问题

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];
        }
    }
}
这是一个非常模糊或伪似的解决方案,但我希望它能让您走上正确的道路。现在,您可以通过以下方式获得动态类型

$answer->value;

A也许合适。是的,我想我会做那样的事。我想这证实了我的想法是正确的。我想也许会有一种完全不同的神奇方式来实现这一点(我有时在拉威尔世界学到了这一点),但这对我来说已经足够了:-)