Php 如何处理Laravel中的模型继承?
我有一个项目,在这个项目中,许多模型都是用雄辩的语言定义的。这在很大程度上是直截了当的,但我很难理解如何处理新案件。我将避免使用laravel/雄辩的术语,以防我只是模糊了问题 我有一个名为Php 如何处理Laravel中的模型继承?,php,laravel,eloquent,laravel-5.3,Php,Laravel,Eloquent,Laravel 5.3,我有一个项目,在这个项目中,许多模型都是用雄辩的语言定义的。这在很大程度上是直截了当的,但我很难理解如何处理新案件。我将避免使用laravel/雄辩的术语,以防我只是模糊了问题 我有一个名为Question的表,其中包含字段id、QuestionTypeID、QuestionStatement 根据QuestionTypeID需要实例化不同的问题类别,这些问题可能会提取额外表的信息,或者在PHP代码中使用不同的业务逻辑 所有这些问题类型都可以实现一个公共接口,如: 接口问题{ int-id; 字
Question
的表,其中包含字段id、QuestionTypeID、QuestionStatement
根据QuestionTypeID
需要实例化不同的问题类别,这些问题可能会提取额外表的信息,或者在PHP代码中使用不同的业务逻辑
所有这些问题类型都可以实现一个公共接口,如:
接口问题{
int-id;
字符串语句;
函数ask($params);
//我想是积垢吧
}
我如何处理不同的问题模型?雄辩的模型是否与特定的表格没有内在联系
例如,我有一个SQLQuestion
(逻辑只需执行从某个查找表中提取的存储SQL语句并返回响应)和一个TimeFrameQuestion
(其逻辑需要调用某些TimeFrame模块)
唯一可以从中提取的表TimeFrameQuestion
是generalQuestion
表,因为它与任何其他表都没有直接关系
有没有可能让两个模型都查看
Question
表,而没有SQLQuestion
集合也包含TimeFrameQuestion
类型的所有记录,反之亦然?我意识到我可能是从错误的方向处理问题。我可能需要控制器继承,而不是某种模型继承
我给了我的问题模型一个由API调用的handle
函数,该函数基于模型的QuestionType
列实例化一个新控制器,调用ask
函数并返回结果:
class Question extends Model
{
protected $table = 'Question';
protected $fillable = [
'Statement',
'QuestionType'
];
public function handle($parameters) {
$class = '\\App\\Modules\\QAndA\\' . $this->QuestionType . 'Controller';
$controller = new $class;
return $controller->ask($this->id, $parameters);
}
}
这些控制器(例如,
SQLQuestionController
,TimeframeQuestionController
)所有这些都扩展了一个QuestionController
,它定义了各种共享功能,并且各个控制器覆盖了它们所需要的任何功能。如果不知道一个问题所期望的其他关系类型,就有点难以回答。根据问题的简单或复杂程度,一个QuestionInterface
可能是一个很好的方法,然后您会有不同的Question
模型,每个模型都有自己的雄辩模型,包含不同的信息。@Scopey为快速响应欢呼。我试着在问题的编辑中回应你的评论。雄辩的模型是否与特定的表格没有内在联系?不,它不是,但是,它定义了关系。。所以我从来没有想过在飞行中改变。。另外,在php中,您可以向类动态添加字段。。更不用说那些神奇的功能了。。