在模型中的数据库查询生成器中使用控制器变量 - Laravel


Using Controller Variable in DB Query Builder in a Model - Laravel

目前,我在使用查询生成器创建的控制器方法中具有查询。这样:

 public function postFilters(){
    $filt = Input::get('name');
    $query = DB::table('wm.top_pages')->where('filter',$filt)->limit(20)->get();
    return View::make('topPages.table', ['wm'=>$query]);
} 

我想将查询获取控制器外部并进入我的模型。但是每次我这样做时,我都会收到一个错误,因为与上面的查询相同,但现在在我的模型中无法识别变量 $filt,这实际上是从我的观点中获取的。谁能就如何做到这一点提供建议?我上面所做的实际上不是MVC应该的样子,我假设有办法绕过它。我只是无法理解有关此特定主题的大多数文档。

多谢。

好吧,如果我是你,我会创建一个存储库接口,并为其创建一个实现,在这个实现中,我将添加我所有的查询,然后变量过滤器将作为参数传递,然后在我的控制器中注入我的接口(使用 laravel 非常简单)。所以我最终得到了一个可扩展的应用程序,如果我想从 MySQL 切换到另一个数据库,我所要做的就是创建一个新的实现并配置 laravel 以使用新的实现。我就是这样做的。如果您想了解有关存储库模式的更多信息,这里有一篇好文章。

我不知道

你为什么要向模型发送查询,无论原因是什么,以下是代码:

在您的模型中

<?php 
 class SomeModel extends Eloquent
 {
 public static function funcname($filter,$data)
 {
 // the filter passed from controller is in $filter
 }
 }

在控制器中

 $filt = Input::get('name');
 $query = DB::table('wm.top_pages')->where('filter',$filt)->limit(20)->get();
 //pass the data from this controller to funcname function we created in model
 SomeModel::funcname($filt,$query);

感谢@Elias Van Ootegem:

我将变量作为参数/参数传递给模型函数,它起作用了。控制器:

 public function postFilters(){
   $filt = Input::get('name');
   $query = webmasters::getFilters($filt);
   return View::make('topPages.table', ['webmasters'=>$query]);
 } 

型:

class webmasters {
   public static function web($filt) {
   $top_pages = DB::table('wm.top_pages')->where('filter',$filt)->limit(20)->get();
   return $top_pages;
}

}