在Eloquent中使用多态关系来扩展模型

时间:2016-01-05 18:23:10

标签: php eloquent polymorphism slim

我对Slim很陌生,仍在努力学习它,并决定重做一个我做过的旧应用程序。我试图使用Eloquent,但很快就迷失了做我认为不会很复杂的事情。 我的应用程序甚至太复杂了,所以我在这里回溯到这个教程,因为这或多或少是我想要做的,使用扩展另一个类的模型,看看我是否能够使这个工作: http://www.richardbagshaw.co.uk/laravel-user-types-and-polymorphic-relationships/这只是一个用户类型扩展名。

我做不到。这显然是Laravel的教程,所以我知道它会有所不同。我重新创建了数据库(减去一些无关的东西,如用户名和密码)并充分填充。我已经复制了User,Freelancer和Employee类的代码,只修改了User类,删除了以下似乎不需要的额外方法(我认为),如下所示。

$user = $app->user->find(1)->firstName;
echo $user

如果我这样做:

$user = $app->user->find(1);
echo $user->userable->dayrate;

它按预期工作。 这不是:

{{1}}

它给了我这个: 致命错误:在第900行的D:\ Apache24 \ htdocs \ eloquent \ vendor \ illuminate \ database \ Eloquent \ Model.php中找不到类'Employee'

然而,它确实正确地确定它是在寻找雇员还是自由职业者,我认为这是来自数据库专栏userable_type。

问题是我应该如何访问子类的字段?我做错了,还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

我最终回到了这个问题,并且能够解决它,以防万一其他人遇到类似的问题。 问题是它在数据库中寻找确切的字符串作为usertype,在本例中是Employee。它真正需要的是寻找包括命名空间在内的整个字符串。通过将整个命名空间作为userable_type(即eloquent \ eloquent \ Employee)添加到数据库条目中,然后将其选中并找到模型... 我查看了Eloquent中的选项,比如MorphClass,但似乎没有做我需要的。

我还没有把它实际应用到我正在进行的项目中,但是我想我可能要么将整个字符串留在那里因为我懒惰而且#&#&#t; 39;不是一个关键任务,时间敏感的应用程序,或尝试用中间件或??做一些事情。无论如何,希望能帮助别人。