我刚跟着todo list tutorial,我有几个问题。
我想用Laravel中的一个键对对象进行排序,但我无法解决这个问题。 我应该在哪里实现这个?在Eloquent?在路线?在控制器?对此略有困惑。我已经使用usort包装器找到了few links遍历sort方法,但是我无法成功实现对象排序(按键列出todo列表项)。
SQL对项目进行排序会更有效吗?使用这样的东西:
$sql = "SELECT * FROM `items` ORDER BY `items`.`time` ASC LIMIT 0, 30 ";
我会在哪里实现这个?我觉得合乎逻辑的地方在我的项目模型中。但我不确定。
我可以发布任何相关的代码,我只是不确定要发布什么,所以随时问。而且我不想用不必要的代码垃圾邮件。
答案 0 :(得分:3)
除非您有其他原因,否则您应该在查询中执行sorting
,如果Laravel
使用Eloquent
您可能会执行以下操作:
$items = Item::orderBy('id')->get();
基本上,您可以将它放在控制器中,例如:
class UserController extends BaseController {
public function getAllUsers()
{
$users = User::orderBy('username')->get();
return View::make('users.index')->with('users', $users);
}
}
要使用Eloquent
查询用户表,您必须创建一个User
模型,如下所示:
class User extends Eloquent {
protected $table = 'users';
}
即使没有Query Builder
模型,您也可以使用User
进行同样的操作:
public function getAllUsers()
{
$users = DB::table('users')->orderBy('username')->get();
return View::make('users.index')->with('users', $users);
}
这样,您就可以从控制器中查询User
模型,然后将查询结果传递给您可以显示它们的视图。这只是一个基本实现,但还有其他方法可以使用存储库类,并称为Laravel应用程序中的最佳实践。这是一个广泛的主题,但您可以查看this article。
如果你有这样的路线:
Route::get('users/all', 'UserController@getAllUsers');
然后将调用上面声明的类的getAllUsers()
方法来显示所有用户。另请阅读the documentation,这是Laravel框架参考的最佳位置。
答案 1 :(得分:1)
路由用于路由,所以不存在。控制器用于业务逻辑,因此它是处理查询结果的好地方。在你的情况下,我只是为一个控制器方法创建一个路由,在那个函数中,我会订购Eloquent的orderBy
函数,如this question中所示:
$posts = Post::orderBy('id', 'DESC')->get();
为这样简单的事情编写SQL查询是不必要的,特别是如果你想编写原始查询。我们使用Eloquent ORM的原因是我们不想编写原始查询。
您应该将排序留给数据库。实际上,您应该将所有与数据库相关的任务留给数据库,并对其进行优化,Laravel将使用这些功能,因此请使用框架的解决方案。