【发布时间】:2017-11-02 11:26:18
【问题描述】:
我正在尝试弄清楚如何从模型中运行原始查询。
假设我有一个模型 FOO,这个模型有一个跨表连接的方法,分组更多的逻辑,对于 Eloquent ORM 来说是很重的。
我想要的是能够从控制器调用此方法,如下所示:
Model::method()->get()
说实话,任何其他调用都可以,只要我可以将原始查询保留在模型中并从控制器调用它。
我要避免的是在控制器中有 DB::raw() 和查询本身。
【问题讨论】:
我正在尝试弄清楚如何从模型中运行原始查询。
假设我有一个模型 FOO,这个模型有一个跨表连接的方法,分组更多的逻辑,对于 Eloquent ORM 来说是很重的。
我想要的是能够从控制器调用此方法,如下所示:
Model::method()->get()
说实话,任何其他调用都可以,只要我可以将原始查询保留在模型中并从控制器调用它。
我要避免的是在控制器中有 DB::raw() 和查询本身。
【问题讨论】:
如果您将static 添加到方法中,您可以直接从模型Model::method() 调用它,否则您应该使用模型实例$modelInstance->method():
所以在你的模型中:
public static function method(){
// your query
return queryBuilder;
}
就是这样,在控制器中你可以随心所欲:
Model::method()->get()
【讨论】:
static添加到方法中,您可以直接从模型Model::method()调用它,否则您应该使用模型实例$modelInstance->method()
有效的方法是用 laravel Query scope 来做
public static function scopeFoo($query)
{
return $query->whereStatus(...);
}
在控制器中
Model::Foo()->get();
【讨论】: