Laravel以急切的装载排序

时间:2016-02-18 15:05:12

标签: laravel-4 eloquent

在Laravel 4.2中,我们有一个User :: model,它有Message ::(s)。每条消息都有一个Sender ::不是普通用户。我想通过Sender :: model中的列动态地对结果进行排序。

我试过这个,但它不起作用:

.toLowerCase

用户类:

$this->sort->dir = 'asc';
$this->sort->by = 'sender_name';

$result = User::find(1)->messages()->with(array('sender' => function($query){
        $query->orderBy($this->sort->by , $this->sort->dir );
}))->paginate(10);

消息类:

class User extends Eloquent{
....
public function messages(){
     return $this->hasMany('Message' , 'toid' , 'id' );
}

消息表:

class Message extends Eloquent{
....
public function sender(){
     return $this->hasOne('Sender' , 'sender_id' , 'fromid' );
}

Sender Tabele:

id, toid, fromid, text

用户表:

sender_id, sender_name, ...

我无法更改表结构,因为它与另一个应用程序相关。有人知道这里有什么问题吗?

1 个答案:

答案 0 :(得分:0)

你几乎要靠近,只需要很少的修改,在闭包中传递变量并在orderBY的末尾添加get()来获取你想要的订单中的记录。

$by = 'sender_name';
$dir= 'asc';

$result = User::find(1)
          ->messages()
          ->with(array('sender' => function($query) use($by, $dir){

              $query->orderBy(by , $dir )->get();

           }))->paginate(10);