Laravel,与多个数据库表相关的查询的最佳位置/命名

时间:2017-11-26 17:08:50

标签: php laravel oop model organization

我正在使用许多Eloquent模型的Laravel应用程序。这些雄辩的模型(例如User,Post等)也包含许多只与模型松散连接的查询(通常是原始sql)。

有些问题是,“从一张桌子获取一些信息,从另一张桌子获取一些信息,从第三张桌子获取一些信息”。现在像User模型这样的模型可以有很多方法,如getAllUncompletedActionsForUsergetSessionsDurationsPerUser。我认为,如果一个雄辩的模型将拥有数千行代码,那就不好了。

您对拆分这些模型有什么看法,您会在哪里放置?如何命名返回处理许多不同表的数据库结果的类?

2 个答案:

答案 0 :(得分:2)

欢迎来到active record模式的瓶颈。这就是为什么这么多人把它称为反模式的原因。

您应该开始将仅与模糊相关的持久性逻辑移动到独立的data mappers,而不是尝试在同一个类中挤出更多功能。

有点像这样:

$user = App\Entity\User::find($id);

$mapper = new App\Mapper\UserActions($dbConnection);
$mapper->fetchIncompleted($users);

var_dump($user->getActions(App\Entity\User::ACTION_INCOMPLTE));

当然,您可能希望使用IoC(如果可能)在给定服务中注入这些映射器,而不必在某个随机位置使用new运算符。

答案 1 :(得分:0)

您是否考虑过使用Traits

如果由我决定,我会创建一个文件夹App/Traits并拥有一个UserActions特征,该特征具有getAllUncompletedActionsForUser()功能。

特征UserActions可用于任何适当的类/模型。