Laravel 4使用with子句进行eloquent排序表格数据

时间:2014-04-16 10:16:05

标签: sorting laravel-4 eloquent

我试图在一个Projects表上的Laravel 4中使用eloquent实现一个排序函数,使用一个相关表中的一个名称字段。

表格

Project(使用client_id,contact_id,phase_id)

客户(身份证,姓名)

联络(身份证,姓名)

阶段(身份证,姓名)

Project保存其他3个相关表的ID,但显示每个表的Name字段以使其可读。我正在使用预先加载并使用以下方式获取数据:

$projects = Project::with('client', 'contact', 'phase')->get();

我希望能够做的是:

$projects = Project::with(array('client' => function($query)
                    {
                      $query->orderBy('name', $direction);
                    }), 'contact', 'phase')->get(); 

如果方向由查询字符串确定,以允许用户在此实例中的客户端名称上切换排序方向。但是,它没有用。

我是Laravel的新手并且试图了解那些不那么有说服力的事情,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

在这里使用连接而不是急切加载(如果我说得对,每个项目有1个联系人,客户端和阶段),或者您需要对集合应用排序。后者将很麻烦。

  Project::join('clients', 'clients.id', '=', 'projects.client_id')
     ->join('contacts', 'contacts.id', '=', 'projects.contact_id')
     ->join('phases', 'phases.id', '=', 'projects.phase_id')
     ->select(array('projects.*','clients.name as clientName','contacts.name as contactName','phases.name as phaseName'))
     ->orderBy("$orderBy", "$direction"); // $orderBy = eg. 'clientName'
     // and if you still need to load related models then uncomment:
     // with(array('contact','client','phase'))
     ->get();