在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, ...
我无法更改表结构,因为它与另一个应用程序相关。有人知道这里有什么问题吗?
答案 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);