目前我在使用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应该是什么样子,我假设有办法解决它。我只是无法理解这个特定主题的大部分文档。
非常感谢。
答案 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;
}
}