在模型中使用DB Query Builder中的Controller变量 - Laravel

时间:2014-12-08 10:09:36

标签: php mysql laravel

目前我在使用Query Builder制作的Controller方法中有Query。像这样:

 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]);
} 

我想在Controller之外获取查询并进入我的模型。但每次我这样做,我得到一个错误,因为与上面相同的查询,但现在我的模型内部无法识别变量$ filt,它实际上来自我的视图。任何人都可以建议如何解决这个问题? 我上面所做的实际上不是MVC应该是什么样子,我假设有办法解决它。我只是无法理解这个特定主题的大部分文档。

非常感谢。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我不知道您为什么要向模型发送查询,无论原因如何都是代码:

在您的模型中

<?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);

答案 2 :(得分:0)

感谢@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;
}

}