另外一个问题......
尝试深入了解如何正确执行此操作。
所以目前我的路线是这样的:
Route::get('/', function()
{
return View::make('pages/home');
});
在那个页面中我有:
$builds = DB::table('blogs')->where('frontpage', '1')->orderBy('id', 'desc')->paginate(20);
foreach ($builds as $build) {
// do stuff
}
这有效,但我知道不应该在视图本身中进行查询。它们应该在哪里?如何才能最好地将数据输入视图?
到目前为止,我能使其工作的唯一方法是将查询放入路径本身并压缩变量:
Route::get('/', function()
{
$builds = DB::table('blogs')->where('frontpage', '1')->orderBy('id', 'desc')->paginate(20);
return View::make('pages/home', compact('builds'));
});
但我相信这也不正确?
我也试过在我的模型中添加一个函数:
public static function findBuilds(){
DB::table('blogs')->where('frontpage', '1')->orderBy('id', 'desc')->paginate(20);
}
然后在路线中:
Route::get('/', function()
{
$builds = Blog::findBuilds();
return View::make('pages/home', compact('builds'));
});
但是当我尝试在视图中使用我的 - > links函数进行分页时,这给了我一个非对象的错误。
我该怎么办?一旦我知道生病了就好了。)
谢谢!
答案 0 :(得分:3)
您在return
方法中遗漏了findBuilds
声明:
public static function findBuilds()
{
return DB::table('blogs')->where('frontpage', '1')->orderBy('id', 'desc')->paginate(20);
// ^^^^^^
}
那就是说,因为你无论如何都在模型中,使用模型而不是回到DB
类:
public static function findBuilds()
{
return static::where('frontpage', '1')->latest('id')->paginate(20);
}
答案 1 :(得分:1)
传统上,您可以将此逻辑放入Controller
,而不是路由.php,模型或视图中 - 对于您的情况,它可能是一个名为的控制器:PagesController
:
<强> /app/routes.php 强>
// tell Laravel to route all requests to /pages/ to your PagesController
Route::controller('pages', 'PagesController');
<强> /app/controllers/PagesController.php 强>
// now create your routes in PagesController:
class PagesController extends BaseController {
// handles: GET pages/home
public function getHome()
{
$builds = DB::table('blogs')
->where('frontpage', '1')
->orderBy('id', 'desc')
->paginate(20);
// pass your $builds to your view
return View::make('pages/home')->with('builds', $builds);
}
}
/app/views/pages/home.blade.php 使用blade syntax提取$builds
数组中每个元素的各种属性和值
@foreach($builds as $build)
// do something with the elements of your builds array
<div class="build">
<h2>{{ $build->name }}</h2>
<!-- etc etc etc-->
</div>
@endforeach
如果你正在构建一个小应用程序,这可能有点过分..所以你确实希望在你的routes.php
中执行此操作,只需将此逻辑添加到路由中并使用相同的blade syntax循环你的$builds
:
Route::get('/', function()
{
$builds = DB::table('blogs')->where('frontpage', '1')
->orderBy('id', 'desc')
->paginate(20);
return View::make('pages/home')->with('builds', $builds);
});
(注意 - 对于较大的应用程序来说,这不是一个好的做法,有很多路由。你的routes.php会填满并让你的生活更加艰难。如果可以,请使用控制器!)