我知道在使用查询构建器时,可以使用多列进行排序
...orderBy('column1')->orderBy('column2')
Run Code Online (Sandbox Code Playgroud)
但现在我正在处理一个集合对象.集合有sortBy方法,但我无法弄清楚如何使它适用于多列.直觉上,我最初尝试使用相同的语法orderBy.
sortBy('column1')->sortBy('column2)
Run Code Online (Sandbox Code Playgroud)
但这显然只是按顺序应用排序,最终按列2排序,忽略column1.我试过了
sortBy('column1', 'column2')
Run Code Online (Sandbox Code Playgroud)
但是抛出错误"asort()期望参数2为long,字符串给出".运用
sortBy('column1, column2')
Run Code Online (Sandbox Code Playgroud)
不会抛出错误,但排序看起来很随机,所以我真的不知道实际上是做什么的.我查看了sortBy方法的代码,但不幸的是我很难理解它是如何工作的.
我有3个型号
模范关系
user 有 belongsToMany('App\Channel');channel 有 hasMany('App\Reply', 'channel_id', 'id')->oldest();假设我有2个频道 - 频道1 - 频道2
channel-2 有最新的答复 channel-1
现在,我想通过其频道的当前回复来订购用户的频道.就像一些聊天应用程序.我怎样才能像这样订购用户的频道?
我已经尝试了一些代码.但什么都没发生
// User Model
public function channels()
{
return $this->belongsToMany('App\Channel', 'channel_user')
->withPivot('is_approved')
->with(['replies'])
->orderBy('replies.created_at'); // error
}
// also
public function channels()
{
return $this->belongsToMany('App\Channel', 'channel_user')
->withPivot('is_approved')
->with(['replies' => function($qry) {
$qry->latest();
}]);
}
// but i did not get the expected result
Run Code Online (Sandbox Code Playgroud)
编辑 也,我试过这个.是的,我确实得到了预期的结果,但如果没有回复,它将不会加载所有频道.
public function channels()
{
return $this->belongsToMany('App\Channel')
->withPivot('is_approved')
->join('replies', 'replies.channel_id', '=', 'channels.id') …Run Code Online (Sandbox Code Playgroud)