我有一个项目,其中使用Eloquent定义了许多模型。这在很大程度上是直截了当的,但我无法理解如何处理新案例。我将避免使用laravel / eloquent术语,以防我模糊问题。
我有一个名为Question
的表格,其中包含字段id, QuestionTypeID, QuestionStatement
。
基于QuestionTypeID
,需要实例化不同类别的问题,这可能会为其他表提取信息或在PHP代码中使用不同的业务逻辑。
所有这些问题类型都可以实现一个通用界面,如:
interface Question {
int id;
string statement;
function ask($params);
// + CRUD stuff I suppose
}
如何处理不同的问题模型? Eloquent模型本身并不与特定的表相关联吗?
我有一个SQLQuestion
(其中逻辑只执行从某个查找表中提取的存储SQL语句并返回响应)和TimeFrameQuestion
(其逻辑需要调用某些TimeFrame模块) )。
可以从一般TimeFrameQuestion
表中提取唯一的表Question
,因为它与任何其他表没有直接关系。
是否可以让2个模型同时查看Question
表,而SQLQuestion
集合中还包含TimeFrameQuestion
类型的所有记录,反之亦然?
答案 0 :(得分:1)
我开始意识到我可能从错误的方向接近问题。而不是某种模型继承,我可能需要控制器继承。
我为我的问题模型提供了一个handle
函数,该函数由API调用,该函数基于模型的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
,它定义了各种共享功能,并且各个控制器会覆盖他们需要的任何内容。