Php Laravel,与多个db表相关的查询的最佳位置/命名

Php Laravel,与多个db表相关的查询的最佳位置/命名,php,laravel,oop,model,organization,Php,Laravel,Oop,Model,Organization,我正在开发一个具有许多雄辩模型的Laravel应用程序。这些有说服力的模型(例如,User、Post等)还包含大量只与模型松散连接的查询(通常是原始sql) 有些查询类似于“从一个表中获取一些信息,从另一个表中获取一些信息,从第三个表中获取一些信息”。现在像用户模型这样的模型可以有很多方法,比如getaluncompletedactionsfourser或getsessiondurationsperuser。我认为,如果一个雄辩的模型有数千行代码,那就不好了 您对拆分这些模型有何看法?您将把这些

我正在开发一个具有许多雄辩模型的Laravel应用程序。这些有说服力的模型(例如,User、Post等)还包含大量只与模型松散连接的查询(通常是原始sql)

有些查询类似于“从一个表中获取一些信息,从另一个表中获取一些信息,从第三个表中获取一些信息”。现在像用户模型这样的模型可以有很多方法,比如
getaluncompletedactionsfourser
getsessiondurationsperuser
。我认为,如果一个雄辩的模型有数千行代码,那就不好了

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

您考虑过使用这些模型吗

如果由我来决定,我会创建一个文件夹
App/Traits
,比如一个
UserActions
trait,它有
getAlluncompletedActionsfourser()
函数

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

您考虑过使用吗

如果由我来决定,我会创建一个文件夹
App/Traits
,比如一个
UserActions
trait,它有
getAlluncompletedActionsfourser()
函数


trait
UserActions
可以在任何适当的类/模型中使用。

欢迎使用该模式的瓶颈。这就是为什么这么多人把它称为反模式

不要试图在同一个类中压缩更多的功能,应该开始将唯一模糊相关的持久性逻辑移动到独立的

有点像这样:

$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
操作符。

欢迎使用该模式的瓶颈。这就是为什么这么多人把它称为反模式

不要试图在同一个类中压缩更多的功能,应该开始将唯一模糊相关的持久性逻辑移动到独立的

有点像这样:

$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
操作符。

如果答案是traits,那么您的问题就错了。@tereško看到了您的答案,您的答案更适合解决问题+我不知道数据映射器。还有其他模式,如和其他一些选项。你可能应该试着找个地方。人们之所以如此不喜欢特征,是因为它们实际上是引擎级的复制粘贴。php解释器在解析代码片段之前,会在代码片段中进行物理复制。如果traits是答案,那么你问的问题就错了。@tereško看到了你的答案,你的答案更适合解决问题+我不知道数据映射器。还有其他模式,如和其他一些选项。你可能应该试着找个地方。人们之所以如此不喜欢特征,是因为它们实际上是引擎级的复制粘贴。php解释器会在代码片段被解析之前进行物理复制。我会研究它,以前见过这种模式,但我认为如果不一直使用映射器,它可能会很混乱。此外,我还认为映射器是db对象(如何存储)和作为代码实体的对象(如何使用)之间的某种适配器。我将研究它,以前见过这种模式,但如果不一直使用映射器,它可能会很混乱。我还认为映射器是db对象(如何存储)和作为代码实体的对象(如何使用)之间的某种适配器。