【问题标题】:Raw query from with in the model来自模型中的原始查询
【发布时间】:2017-11-02 11:26:18
【问题描述】:

我正在尝试弄清楚如何从模型中运行原始查询。

假设我有一个模型 FOO,这个模型有一个跨表连接的方法,分组更多的逻辑,对于 Eloquent ORM 来说是很重的。

我想要的是能够从控制器调用此方法,如下所示:

Model::method()->get()

说实话,任何其他调用都可以,只要我可以将原始查询保留在模型中并从控制器调用它。

我要避免的是在控制器中有 DB::raw() 和查询本身。

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    如果您将static 添加到方法中,您可以直接从模型Model::method() 调用它,否则您应该使用模型实例$modelInstance->method()

    所以在你的模型中:

    public static function method(){
        // your query
        return queryBuilder;
    }
    

    就是这样,在控制器中你可以随心所欲:

    Model::method()->get()
    

    【讨论】:

    • 感谢 Maraboc 和 Kanna,这很有效。问题:模型方法需要静态吗?这就是 Eloquent 的工作原理吗?
    • 如果将static添加到方法中,您可以直接从模型Model::method()调用它,否则您应该使用模型实例$modelInstance->method()
    【解决方案2】:

    有效的方法是用 laravel Query scope 来做

    public static function scopeFoo($query)
    {
        return $query->whereStatus(...);
    }
    

    在控制器中

    Model::Foo()->get();
    

    【讨论】:

      猜你喜欢
      • 2017-05-18
      • 2018-02-01
      • 2021-03-22
      • 2017-08-17
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      相关资源
      最近更新 更多