【问题标题】:Laravel + Eloquent - Passing through custom function firstLaravel + Eloquent - 首先通过自定义函数
【发布时间】:2014-01-26 07:22:40
【问题描述】:

我想我想做的很简单。在我的控制器中,我有代码:

$list = SiteCategory::where('type','=','A')->get();

它返回一个标准的 eloquent 集合对象。但是,有时当我检索类别时,我希望它们首先以特定方式排序。那么我可以在我的模型中添加一些功能吗,例如:

Class SiteCategory extends Eloquent {

    public function mySpecialFunction(){
         // retrieve all categories, manipulate them in some way and return.
    }

}

然后我该如何调用这个函数?我不明白,我读过的教程和问题也无济于事。例如,在 SO 上的this question 中,他似乎暗示他可以这样调用他的函数:

SiteCategory->mySpecialFunction()

没听懂?

【问题讨论】:

  • 为什么不在它们被检索到之后进行排序呢?如果排序是通过函数完成的,它总是在数据库获取之后完成。
  • 好的,所以如果我把这个函数放在我的模型中,那么是否可以将它链接到像 siteCategory::All()->mySpecialFunction() 这样的雄辩的调用上或者我必须声明它作为静态函数并单独调用?
  • 这个问题有一个使用自定义排序功能的例子:stackoverflow.com/questions/15533659/sorting-data-with-eloquent
  • 谢谢,Stefan,我现在已经解决了这个问题。关键是在我的控制器中声明 $variable = new SiteCategory() 然后 $variable->mySpecialFunction() ,并在 mySpecialFunction() 中使用 $this 访问 eloquent

标签: laravel eloquent


【解决方案1】:

您可以像这样在Model 中使用scope 方法

Class SiteCategory extends Eloquent {

    public function scopeMySpecialFunction($query){
        // retrieve all categories, manipulate them in some way and return.
    }

}

然后你可以像普通的 Eloquent 内置函数一样调用这个函数

SiteCategory::mySpecialFunction();

如果你想将任何参数传递给这个函数,那么你可以像这样添加参数

public function scopeMySpecialFunction($query, $param1, $param2){
    // retrieve all categories, manipulate them in some way and return.
}

注意第一个$query 参数,它是作用域方法的第一个参数,$queryIlluminate\Database\Eloquent\Builder 的一个实例,您可以在该函数中使用$this 并可以链接方法,如

SiteCategory::mySpecialFunction()->find(1);

在这种情况下,您必须从函数中返回 $query 以链接其他方法,例如:

public function scopeMySpecialFunction($query, $param1, $param2){
    // do something
    return $query;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2019-10-21
    • 2011-08-11
    • 2014-01-11
    • 2023-04-01
    • 1970-01-01
    • 2017-06-21
    相关资源
    最近更新 更多