首页 文章

Laravel中数据库查询构建器的位置

提问于
浏览
0

我可以使用范围来执行与模型相关的基本查询(例如选择那些今天过生日的用户),范围显然放在Eloquent Models中并返回Eloquent Query Builder的实例 . 但是,如果我需要执行更复杂的查询,比如按电子邮件类型分组大量电子邮件日志表,加入用户和电子邮件并应用一些聚合,该怎么办?由于查询的结果字段是混合的(电子邮件,电子邮件类型,用户,日志字段),我必须使用数据库查询生成器 . 我犹豫是否想要给建筑师打电话的最佳位置 .

可以是主模型中的静态方法,我将其他表连接到:

class ConcreteModel extends Model {

      public static function someQuery(): \Illuminate\Database\Query\Builder {
        return \DB::table('some_table')->join('something');
      }

    }

或者更确切地说,将这些东西放在需要它的服务中?

1 回答

  • 0

    我想出了使用Visitor模式封装复杂查询的想法 . 访问者对象封装了具体的查询,雄辩的模型可以接受客户端传递的访问者,并调用标准方法将访问者传递给访问者,并将访问者的结果移交给客户端,并将StdClasses的集合移交给访客 . 似乎它可以为我工作 .

相关问题