如何在Laravel 4中进行对象排序,在MySQL中执行它是否更有效?

时间:2014-04-20 23:19:56

标签: php mysql sorting laravel eloquent

我刚跟着todo list tutorial,我有几个问题。

  1. 我想用Laravel中的一个键对对象进行排序,但我无法解决这个问题。 我应该在哪里实现这个?在Eloquent?在路线?在控制器?对此略有困惑。我已经使用usort包装器找到了few links遍历sort方法,但是我无法成功实现对象排序(按键列出todo列表项)。

  2. SQL对项目进行排序会更有效吗?使用这样的东西:

    $sql = "SELECT * FROM `items` ORDER BY `items`.`time` ASC LIMIT 0, 30 ";
    
  3. 我会在哪里实现这个?我觉得合乎逻辑的地方在我的项目模型中。但我不确定。

    我可以发布任何相关的代码,我只是不确定要发布什么,所以随时问。而且我不想用不必要的代码垃圾邮件。

2 个答案:

答案 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将使用这些功能,因此请使用框架的解决方案。